正则表达式匹配像 ababba 等的字符串

Hao*_* Wu 9 regex pcre

写一个表达式来匹配像a, aba, ababba,ababbabbba等字符串。 连续的数量b在每个 之后逐一增加a

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

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

通行证:

  • a
  • aba
  • ababba
  • ababbabbba
  • ababbabbbabbbba

失败案例:

  • aa
  • abbaa
  • aabb
  • abababa
  • ababbba

是我到目前为止尝试过的

^a((b(?2)?)a)?(?1)*$
Run Code Online (Sandbox Code Playgroud)

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

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

bob*_*ble 9

基于@Michails 很好的答案- 我玩过并试图将其限制在 12 个字符以下。带 10 个(演示)

(b\1|^a)+$
Run Code Online (Sandbox Code Playgroud)

我仍然想知道,它是否工作正常。使用 start anchor (demo)肯定会更快


Log*_*Kip 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$ 当然,除了最后一个,后面只是最后一个
  • * 重复这种“每次增加一个 b”的模式
  • a$ 匹配最后一个

https://regex101.com/r/J5rXH9/3上测试


Mic*_*ail 6

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

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