0

我不知道最长的匹配选项在谷歌的 re2 库中做了什么。

不正确的解释:

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

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

我无法在互联网上找到任何讨论这个问题的人,这表明我是唯一一个感到困惑的人。谁能帮我吗?

4

1 回答 1

0

通常 POSIX 正则表达式返回最左边的最长匹配。也就是说(假设您只搜索第一个匹配项,这是大多数正则表达式实现的默认行为)正则表达式/a*/"a"在应用时返回,"abaa"因为最左边a(位置 0)匹配。aa正则表达式在看到后面的位置 2之前宣布成功。

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

a(b|bb)

"ab"在字符串中匹配,"abb"因为第一个替换已经匹配。

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

于 2011-08-29T15:10:37.317 回答