为什么正则表达式模式 g[a-z]+?d 在 grep 中作为单个单词匹配“godgood”,但在网上的工作方式不同?

问题描述 投票:0回答:1

我正在学习正则表达式,遇到了一种我无法解释的行为。我有文本“godgood”,并且正在使用正则表达式模式 g[a-z]+?d。我的目标是将“上帝”和“好”作为两个单独的词进行匹配。

但是,当我在 grep(版本 3.7)中使用此模式时,它会将整个“godgood”作为单个单词进行匹配。另一方面,当我在各种在线正则表达式平台上尝试相同的模式时,它分别正确匹配“god”和“good”。

有人可以解释为什么会出现这种行为差异吗?与在线正则表达式引擎相比,grep 3.7 版本处理此模式的方式有什么不同吗?任何见解或解释将不胜感激。谢谢。

$ egrep -o 'g[a-z]+?d' file
godgood
linux grep
1个回答
0
投票

为什么会有这种行为差异?

因为“各种在线正则表达式平台”使用不同的正则表达式引擎规则。特别是,

+?
在perl正则表达式中是非贪婪匹配,而在扩展正则表达式中
+?
是贪婪的
+
后跟
?

egrep
已弃用。使用
grep -E

© www.soinside.com 2019 - 2024. All rights reserved.