我不知道最长的匹配选项在谷歌的 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选项将从字符串中收集所有可能的匹配项,然后返回其中最长的一个。