Следующее регулярное выражение соответствует строке, состоящей из неравного числа X
:
^[^X]*(X[^X]*X[^X]*)*X[^X]*$
Быстрый разбив:
^ # the start of the input
[^X]* # zero or more chars other than 'X'
( # start group 1
X[^X]* # an 'X' followed by zero or more chars other than 'X'
X[^X]* # an 'X' followed by zero or more chars other than 'X'
) # end group 1
* # repeat group 1 zero or more times
X # an 'X'
[^X]* # zero or more chars other than 'X'
$ # the end of the input
Итак, повторяемая группа 1приводит к совпадению нуля или четного числа X
для сопоставления, а одиночный X
после равен делает его неравномерным.