Write an expression to match strings like
a,aba,ababba,ababbabbba, etc. The number of consecutivebincreases one by one after eacha.
I'm learning regex and struggling with this regex quiz for several days but still couldn't quite get it right.
According to the description, the regex should match and fail following cases:
aabaababbaababbabbbaababbabbbabbbbaaaabbaaaabbabababaababbbaHere's what I tried so far
^a((b(?2)?)a)?(?1)*$
I'm thinking to use recursion but I don't know how to make the recursion add just one b after each a is met. So my solution also passes abba and ababbba etc.
Any ideas? What did I miss?
To match a character having special meaning in regex, you need to use a escape sequence prefix with a backslash ( \ ). E.g., \. matches "." ; regex \+ matches "+" ; and regex \( matches "(" . You also need to use regex \\ to match "\" (back-slash).
The character + in a regular expression means "match the preceding character one or more times". For example A+ matches one or more of character A. The plus character, used in a regular expression, is called a Kleene plus .
Based on @Michails great answer - I played and tried to get it below 12 characters. With 10 (demo)
(b\1|^a)+$
Still I wonder, if it works fine. It will be definetly faster with start anchor (demo).
You would try this:
^((?(1)b\1|a))+$
https://regex101.com/r/TGBHzj/1
^(?=aba|a$)(?:a(b+)(?=a\1ba|a$))*a$
^ From the beginning :(?=aba|a$) Will start by aba to make sure it starts with one b (no match, just a check)a(b+) An a followed by several b (capture the number of b)(?=a\1ba) this abbb must be followed by a, one more b, then a|a$ except for the last one of course, which is simply followed by the last a* repeat this pattern of "ab+ with one more b each time"a$ match the final aTest it on https://regex101.com/r/J5rXH9/3
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With