Regex 对于Google re2库,最长的_匹配意味着什么?

Regex 对于Google re2库,最长的_匹配意味着什么?,regex,re2,Regex,Re2,我不知道Google的re2库中的最长匹配选项有什么作用 不正确的解释: 将/a*/应用于“aaaaa”时,设置最长匹配将使Kleene闭包贪婪,以便正则表达式匹配整个字符串“aaaaa”,而不是空字符串“ 将/a*/应用于“abaa”时,设置最长匹配将使正则表达式匹配最长的匹配“aa”(从索引2开始),而不是最左侧的匹配“a”(从索引0开始) 我在网上找不到任何人讨论这个问题,这表明我是唯一一个感到困惑的人。有人能帮我吗?通常POSIX正则表达式会返回匹配项。也就是说(假设您只搜索第一个匹

我不知道Google的re2库中的最长匹配选项有什么作用

不正确的解释:

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

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


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

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

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

a(b|bb)
将匹配字符串
“abb”
中的
“ab”
,因为第一个替换项已经匹配


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

您的示例正是re2的行为。谢谢如果将
/a(b | bb)/
应用于
xabxabb
,则无论
最长匹配是否有效,我都希望匹配开始位置为1。你的最后一段不是很清楚,但听起来好像你在说它会拒绝在第1位的比赛,因为在第4位有一个较长的。对,它应该总是最左边的位置。此外,更改的顺序也很重要:
/a(bb | b)/
on
“abb”
返回
“abb”
,而不考虑
最长匹配