Как гласит название, имеет ли шаблон регулярного выражения (x|y)* ту же строку, что и [xy]*?
Perle regex - Is (x | y) * эквивалентно [xy] *?
Ответ 1
Да, они соответствуют одному и тому же набору строк.
Они не эквивалентны. (x|y)* устанавливает backreference, [xy]* не делает.
Таким образом, (?:x|y)* и [xy]* эквивалентны поведению, так как ни одна из них не задает обратную ссылку.
Ответ 2
Он близок к эквиваленту, но первая форма делает захват из группы, ограниченной ( ), которую можно получить с помощью $1 (для первого), когда соответствие regex.
Если вы хотите избежать захвата, используйте
(?:re)
Где re - это регулярное выражение.
Примечание
это работает только в том случае, если x и y в точности x и y, если они не являются общими регулярными выражениями
См. Backtracking