我无法弄清楚Google的re2库中longest_match选项的作用。
不正确的解释:
将/a*/
应用于"aaaaa"
时,设置最长匹配会使Kleene闭包变得贪婪,以便正则表达式匹配整个字符串"aaaaa"
而不是空字符串{{1 }}
将""
应用于/a*/
时,设置最长匹配会使正则表达式匹配最长匹配"abaa"
(从索引2开始)而不是最左边的匹配{{1 (从索引0开始)
我无法在互联网上找到任何讨论此事的人,这表明我是唯一一个困惑的人。任何人都可以帮助我吗?
答案 0 :(得分:0)
通常POSIX正则表达式返回leftmost longest匹配。即(假设您只搜索第一个匹配,这是大多数正则表达式实现的默认行为),正则表达式/a*/
在应用于"a"
时将返回"abaa"
,因为最左边的{{1} }(位置0)匹配。在看到位置2后面的a
之前,正则表达式声明成功。
其他正则表达式库(例如PCRE)返回第一个可能的匹配,例如
aa
将匹配字符串a(b|bb)
中的"ab"
,因为第一次更改已匹配。
现在我不知道"abb"
库,但我假设re2
选项将从字符串中收集所有可能的匹配项,然后返回其中最长的一个。