我不知道最长的匹配选项在谷歌的 re2 库中做了什么。
不正确的解释:
当应用于
/a*/
时"aaaaa"
,设置最长匹配会使 Kleene 闭包变得贪婪,以便正则表达式匹配整个字符串"aaaaa"
而不是空字符串""
。当应用于
/a*/
时"abaa"
,设置最长匹配使正则表达式匹配最长的匹配"aa"
(从索引 2 开始)而不是最左边的匹配"a"
(从索引 0 开始)
我无法在互联网上找到任何讨论这个问题的人,这表明我是唯一一个感到困惑的人。谁能帮我吗?
通常 POSIX 正则表达式返回最左边的最长匹配。也就是说(假设您只搜索第一个匹配项,这是大多数正则表达式实现的默认行为)正则表达式/a*/
将"a"
在应用时返回,"abaa"
因为最左边a
(位置 0)匹配。aa
正则表达式在看到后面的位置 2之前宣布成功。
其他正则表达式库(例如 PCRE)返回第一个可能的匹配项,例如
a(b|bb)
将"ab"
在字符串中匹配,"abb"
因为第一个替换已经匹配。
现在我不知道该re2
库,但我假设该longest_match
选项将从字符串中收集所有可能的匹配项,然后返回其中最长的一个。