答案 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??)+
。