可选的量词,就像默认情况下应该贪婪的其他人一样,即应尽可能匹配。
让我们尝试将(AB)?.*B
的正则表达式应用于输入AB
。
我期望的是(AB)?
将贪婪地匹配完整的字符串,而其余.*B
的字符将不再匹配。
实际行为有所不同,它与给定的输入匹配。为什么?
答案 0 :(得分:2)
那是因为您要让正则表达式保证后缀B
让我们分解一下:
(AB)?
-尝试给我连续的AB
.*
-尝试给我零或更多的东西B
-给我B
或给我死亡! B
必须被匹配,因此.*
匹配A
,而(AB)?
却一无所获如果您输入的是ABB
,则AB
将进入捕获组#1
您做了吗?
(A|B)?.*B
然后至少有A
会进入组#1,但是B
仍明显与结尾的B
匹配
答案 1 :(得分:1)
正则表达式
(AB)?.*B
应用于字符串
AB
像这样工作:
B
。AB
只能出现一次,或者根本不能出现。AB
被视为出现一次,则最后一个B不存在。因此,正则表达式引擎决定序列AB
根本不出现。.*
将匹配A
B
将匹配B