Подтвердить что ты не робот

Perle regex - Is (x | y) * эквивалентно [xy] *?

Как гласит название, имеет ли шаблон регулярного выражения (x|y)* ту же строку, что и [xy]*?

4b9b3361

Ответ 1

Да, они соответствуют одному и тому же набору строк.

Они не эквивалентны. (x|y)* устанавливает backreference, [xy]* не делает.

Таким образом, (?:x|y)* и [xy]* эквивалентны поведению, так как ни одна из них не задает обратную ссылку.

Ответ 2

Он близок к эквиваленту, но первая форма делает захват из группы, ограниченной ( ), которую можно получить с помощью $1 (для первого), когда соответствие regex.

Если вы хотите избежать захвата, используйте

(?:re)

Где re - это регулярное выражение.

Примечание

это работает только в том случае, если x и y в точности x и y, если они не являются общими регулярными выражениями

См. Backtracking