Каков порядок приоритета выражений в операторе (..|. .. .|..)
- слева направо, справа налево или что-то еще?
Порядок оператора регулярного выражения (.. |....... |..)
Ответ 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).