Мой вопрос очень похож на this один, за исключением того, что я хочу сделать каждое чередование необязательным и не повторяющимся.Регулярное выражение: соответствие произвольным чередованиям в любом порядке, не допуская повторений
Пример: Регулярное выражение должно соответствовать следующие строки (это упрощенно, А и В могут быть сложными):
XAB
XBA
XA
XB
X
Это не может соответствовать XAA, Xbb, XABA, XABB, XBAA
Вот то, что я до сих пор:
/(X)(?:(A)|(B)){0,2}$/
Это позволяет для повторения (например, как XAA), и, кажется, вызывает проблемы с ХВ в PHP с пустой элемент массива.
EDIT: Забыл упомянуть, что мне нужно получить фактические значения X, A и B (если доступно). Это не просто совпадение полной строки.
Вы в основном говорят, что это может 't сопоставлять 'A' или' B' более одного раза, так почему бы вам просто не сделать чек для этого и не покончить с регулярным выражением? 'if (substr_count ($ string, 'A')> = 2) echo 'error!';' –
Вот демо-версия regex, если вы хотите придерживаться ее ... http://regex101.com/r/kD2fA1 –