正则表达式匹配 ababba 等字符串
Regex to match a string like ababba etc
Write an expression to match strings like a
, aba
, ababba
, ababbabbba
, etc. The number of consecutive b
increases one by one after each a
.
我正在学习正则表达式并为这个正则表达式测验苦苦挣扎了好几天,但仍然无法完全正确。
根据描述,正则表达式应该匹配并失败以下情况:
通过案例:
a
aba
ababba
ababbabbba
ababbabbbabbbba
失败案例:
aa
abbaa
aabb
abababa
ababbba
^a((b(?2)?)a)?(?1)*$
我正在考虑使用递归,但我不知道如何让递归在满足每个 a
后只添加一个 b
。所以我的解决方案也通过了 abba
和 ababbba
等
有什么想法吗?我错过了什么?
^(?=aba|a$)(?:a(b+)(?=aba|a$))*a$
^
从头开始:
(?=aba|a$)
将以 aba 开头,以确保它以一个 b 开头(不匹配,只是检查)
a(b+)
一个a后面跟着几个b(抓取b的个数)
(?=aba)
这个abbb后面必须是a,再加一个b,然后是a
|a$
当然除了最后一个,后面就是最后一个
*
重复这种“ab+ 每次多一个 b”的模式
a$
匹配最后一个
上测试
你会试试这个:
^((?(1)b|a))+$
基于 - I played and tried to get it below 12 characters. With 10 (demo)
(b|^a)+$
我仍然想知道它是否正常工作。肯定会 faster with start anchor (demo).
Write an expression to match strings like
a
,aba
,ababba
,ababbabbba
, etc. The number of consecutiveb
increases one by one after eacha
.
我正在学习正则表达式并为这个正则表达式测验苦苦挣扎了好几天,但仍然无法完全正确。
根据描述,正则表达式应该匹配并失败以下情况:
通过案例:
a
aba
ababba
ababbabbba
ababbabbbabbbba
失败案例:
aa
abbaa
aabb
abababa
ababbba
^a((b(?2)?)a)?(?1)*$
我正在考虑使用递归,但我不知道如何让递归在满足每个 a
后只添加一个 b
。所以我的解决方案也通过了 abba
和 ababbba
等
有什么想法吗?我错过了什么?
^(?=aba|a$)(?:a(b+)(?=aba|a$))*a$
^
从头开始:(?=aba|a$)
将以 aba 开头,以确保它以一个 b 开头(不匹配,只是检查)a(b+)
一个a后面跟着几个b(抓取b的个数)(?=aba)
这个abbb后面必须是a,再加一个b,然后是a|a$
当然除了最后一个,后面就是最后一个*
重复这种“ab+ 每次多一个 b”的模式a$
匹配最后一个
你会试试这个:
^((?(1)b|a))+$
基于
(b|^a)+$
我仍然想知道它是否正常工作。肯定会 faster with start anchor (demo).