I am having trouble building a regular expression with the set of strings over {a, b, c} that is an odd length with exactly one a. Here is my best attempt so far:
(bb|bc|cb|cc)*a(bb|bc|cb|cc)*
This does good for even b and c on either side of the a, but does not account for a odd b and c combination on either side of the a.
Any hints?
Your string will be a prefix followed by a followed by a suffix.
Both prefix and suffix can be zero length. If not, they have to be either both even or both uneven. This means you have two main cases.
Try this (incomplete and wrong):
There is still one uneven case missing: a single
[bc]:According to http://www.fileformat.info/tool/regex.htm, this matches
acacccabbI expect it matches the rest too…
The left side guarantees even (or empty) sequences of
borc.The right side is either a single
borcfollowed by a multiple of two (so that it stays uneven).Kobi came up with this refinement of the above:
How does this work?
The first group is guaranteed to be even. The second group is guaranteed to be uneven with a single
ainside. The third group is guaranteed to be be even. Thus, the whole is guaranteed to be uneven.