编写一个表达式以匹配诸如
a
,aba
,ababba
,ababbabbba
等字符串。连续的b
的数量在之后每个a
。
我正在学习正则表达式,并在正则表达式测试中苦苦挣扎了几天,但仍然不能完全正确。
根据描述,正则表达式应匹配并在以下情况下失败:
a
aba
ababba
ababbabbba
ababbabbbabbbba
aa
abbaa
aabb
abababa
ababbba
^a((b(?2)?)a)?(?1)*$
我正在考虑使用递归,但我不知道如何在满足每个b
之后仅添加一个a
来实现递归。因此,我的解决方案还通过了abba
和ababbba
等。
有什么想法吗?我想念什么?
答案 0 :(得分:9)
基于@Michails great answer-我玩了游戏,并尝试将其限制在12个字符以下。 With 10 (demo)
(b\1|^a)+$
我还是想知道它是否工作正常。肯定是faster with start anchor (demo)。
答案 1 :(得分:6)
^(?=aba|a$)(?:a(b+)(?=a\1ba|a$))*a$
^
从一开始:(?=aba|a$)
将以aba开头,以确保它以一个b开头(不匹配,只有一个检查)a(b+)
a后面是几个b(捕获b的数量)(?=a\1ba)
此abbb后面必须紧跟着a,再是b,然后是a |a$
除了课程中的最后一个课程,后面紧跟着一个课程*
重复这种“ ab +每次再加一个b”的模式a$
匹配最后一个a 答案 2 :(得分:6)
您可以尝试以下操作:
^((?(1)b\1|a))+$