为什么正则表达式(aba?)+与abab不匹配?

时间:2017-12-04 08:44:31

标签: regex

给定(aba?)+作为正则表达式,abab是字符串。

为什么它只匹配aba

由于正则表达式中的最后一个是可选的,因此也不是abab匹配吗?

https://regex101.com/

上测试

3 个答案:

答案 0 :(得分:1)

(aba?)+仅匹配aba abab的原因是贪婪匹配:第一个循环中的可选a在再次测试组之前进行测试,并匹配。因此,剩余的字符串为b,再次与(aba?)不匹配。

如果您要关闭此可选a的贪婪匹配,请使用a??,或以不同方式编写正则表达式。

答案 1 :(得分:0)

由于(aba?)+贪婪,你的模式会尽可能地匹配。因为它首先匹配" aba",剩余的" b"不匹配。

尝试非贪婪版本(它将匹配第一个和第二个" ab"' s):

$ echo "abab" | grep -Po "(aba?)+"
aba
$ echo "abab" | grep -Po "(aba??)+"
abab

答案 2 :(得分:0)

正确的正则表达式是:

^(aba??)+$
与@WiktorStribizew和YSelf讨论的

而不是(aba??)+