正则表达式组不贪婪吗?

正则表达式组不贪婪吗?

sed 匹配总是贪婪的吗?

我正在尝试使用 sed 尽早将 XML 注释附加到 XML 文件中,该注释位于 XML 声明之后(如果有的话)。在 shell 环境中是这样的:

sed -e 's/\(<?xml[^?]*?>\)\?$/\1<!-- This is the new comment -->/'

我知道 sed 想要找到最左边的匹配,并在匹配开始的最左边的位置尽可能贪婪。但是,可选组与任何 XML 声明都不匹配,如下所示:

<?xml version="1.0" encoding="utf-8"?>

相反,它选择匹配空字符串,因此注释会附加在 XML 声明之前。这是为什么?

如果我强制指定该组,它就会按预期匹配。

答案1

啊。该文档以 UTF-8 BOM 开头。

因此,空字符串匹配发生在 BOM 之前,而 BOM 之后的“预期”匹配不是最左边的可能匹配。

相关内容