Как гласит название, имеет ли шаблон регулярного выражения (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