I'm trying to produce a regex that can match every non repeating a, b or c characters (in one and single match)
I did this: ((a|b|c)(?!\2))
Here is the regex101 example: https://regex101.com/r/yJwHOQ/1
It works fine for:
- a or b or c (single character)
- bcabca
Now, I want to improve it so it can also match the first repeated character. For example, when I try bcaa, I want to match bca instead of only bc (in a single match).
Is there a way to improve my regex so it can match this case also?
Thanks in advance for your help.
Ps: it's for PCRE but it would be nice to work also with Python
CodePudding user response:
A lookahead is a zero-length assertion. It matches at a position, eg between b and c.
For example in abb after first b there is the same character b. The negative lookahead disallows that and just a gets matched. To even match the character that failed an idea is to reuse [abc].
^(?:([abc])(?!\1))*[abc]
Note: In PCRE a group reference can be used to match the same again, eg (?1) for ([abc]).
