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