对于Google re2库,longest_match是什么意思?

时间:2011-08-29 14:32:42

标签: regex re2

我无法弄清楚Google的re2库中longest_match选项的作用。

不正确的解释

  • /a*/应用于"aaaaa"时,设置最长匹配会使Kleene闭包变得贪婪,以便正则表达式匹配整个字符串"aaaaa"而不是空字符串{{1 }}

  • ""应用于/a*/时,设置最长匹配会使正则表达式匹配最长匹配"abaa"(从索引2开始)而不是最左边的匹配{{1 (从索引0开始)

我无法在互联网上找到任何讨论此事的人,这表明我是唯一一个困惑的人。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

通常POSIX正则表达式返回leftmost longest匹配。即(假设您只搜索第一个匹配,这是大多数正则表达式实现的默认行为),正则表达式/a*/在应用于"a"时将返回"abaa",因为最左边的{{1} }(位置0)匹配。在看到位置2后面的a之前,正则表达式声明成功。

其他正则表达式库(例如PCRE)返回第一个可能的匹配,例如

aa

将匹配字符串a(b|bb) 中的"ab",因为第一次更改已匹配。

现在我不知道"abb"库,但我假设re2选项将从字符串中收集所有可能的匹配项,然后返回其中最长的一个。