2013-04-18 2 views
1

когда я использую pattrenМаленькая путаница в регулярном выражении на | (Труба)

"(see|see also) [\w\d]+" 

на Текст

see page 
see also page 

Но выходные матчей

see page 
see also 

, если им поменять местами см, также см

"(see also|see) [\w\d]+" 

выход

see page 
see also page 

Я думал, что оба они такие же. Могу ли я узнать, почему это происходит?

ответ

6

Удаление чередования и оставление see [\w\d]+ будет соответствовать строке «см. Также страницу», потому что оно удовлетворено see also. То, как регулярные выражения работают с чередованием (по крайней мере, в этом случае), заключается в том, что он будет пытаться сопоставить каждую опцию по порядку с остальной частью шаблона и останавливаться, как только это будет успешно, или вернуться к альтернативам, когда это выходит из строя. Когда вы меняете чередование, оно сначала пытается совпадать с see also, но это не удастся с «см. Страницу».

Было бы больше смысла писать это как see(also)? [\w\d]+

+0

Спасибо :) я получил идеальный подход – Civa

Смежные вопросы