Порядок оператора регулярного выражения (.. |....... |..)

Каков порядок приоритета выражений в операторе (..|. .. .|..) - слева направо, справа налево или что-то еще?

Ответ 1

Слева направо, а первая альтернатива соответствует "победам", другие не проверяются. Это типичное поведение регулярного выражения NFA. Хорошее описание этого поведения представлено на regular-expressions.info Альтернатива страница.

Обратите внимание, что RegexOptions.RightToLeft только заставляет движок regex проверять входную строку справа налево, модификатор не влияет на то, как механизм regex обрабатывает сам шаблон.

Позвольте мне проиллюстрировать: если у вас есть регулярное выражение (aaa|bb|a) и попытайтесь найти совпадение в bbac с помощью Regex.Match, то значение, которое вы получите, будет bb, потому что после bbb появляется альтернатива a. Если вы используете Regex.Matches, вы получите все совпадения, и оба bb и a приземляются в ваших результатах.

Кроме того, тот факт, что шаблон регулярного выражения рассматривается слева направо, дает понять, что внутри альтернативной группы, не привязанной к нему, имеет смысл порядок альтернатив. Если вы используете регулярное выражение (a|aa|aaa) для соответствия с abbccaa, первая альтернатива a будет соответствовать каждому a в строке (см. regex демо). Как только вы добавите границы слов, вы можете поместить альтернативы в любом порядке (см. еще одну демо-версию regex).