正则表达式匹配 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.

我正在学习正则表达式并为这个正则表达式测验苦苦挣扎了好几天,但仍然无法完全正确。

根据描述,正则表达式应该匹配并失败以下情况:

通过案例:

失败案例:


这里是what I tried so far

^a((b(?2)?)a)?(?1)*$

我正在考虑使用递归,但我不知道如何让递归在满足每个 a 后只添加一个 b。所以我的解决方案也通过了 abbaababbba

有什么想法吗?我错过了什么?

^(?=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$匹配最后一个

https://regex101.com/r/J5rXH9/3

上测试

你会试试这个: ^((?(1)b|a))+$

https://regex101.com/r/TGBHzj/1

基于 - I played and tried to get it below 12 characters. With 10 (demo)

(b|^a)+$

我仍然想知道它是否正常工作。肯定会 faster with start anchor (demo).