我正在学习正则表达式,遇到了一种我无法解释的行为。我有文本“godgood”,并且正在使用正则表达式模式 g[a-z]+?d。我的目标是将“上帝”和“好”作为两个单独的词进行匹配。
但是,当我在 grep(版本 3.7)中使用此模式时,它会将整个“godgood”作为单个单词进行匹配。另一方面,当我在各种在线正则表达式平台上尝试相同的模式时,它分别正确匹配“god”和“good”。
有人可以解释为什么会出现这种行为差异吗?与在线正则表达式引擎相比,grep 3.7 版本处理此模式的方式有什么不同吗?任何见解或解释将不胜感激。谢谢。
$ egrep -o 'g[a-z]+?d' file
godgood
为什么会有这种行为差异?
因为“各种在线正则表达式平台”使用不同的正则表达式引擎规则。特别是,
+?
在perl正则表达式中是非贪婪匹配,而在扩展正则表达式中+?
是贪婪的+
后跟?
。
egrep
已弃用。使用grep -E
。