正则表达式匹配:贪婪量词与引擎机制解析
1. 标准量词的贪婪特性
标准量词(如 ?
、 +
、 *
和 {min,max}
)具有贪婪特性。当这些量词作用于子表达式时,存在最小匹配次数和最大尝试匹配次数。贪婪量词总是尝试尽可能多地进行匹配,只有在后续正则表达式部分匹配失败时,才会放弃部分匹配。
例如,使用 \b\w+s\b
匹配以 s
结尾的单词, \w+
会先尝试匹配整个单词,但为了让 s
也能匹配, \w+
必须放弃部分匹配。
再看 [0-9]+
在 “March 1998” 中的匹配情况,匹配到 1
后,由于 +
是贪婪的,它会继续匹配 998
,直到字符串结束。
2. 贪婪特性的应用示例
- 邮件主题匹配 :使用
^Subject: (.+)
可以通过工具的括号记忆功能(如 Perl 中的$1
)获取邮件主题文本。.*
是贪婪的,会尽可能多地匹配字符,从而填充$1
。 - 过度贪婪的问题 :若使用
^Su