2014-09-03 5 views
0

Расширение базового знания регулярных выражений, и некоторые вещи для меня непонятны.Perl-regex эквивалент слова-границы

Если \b соответствует границе слова, следующие два регулярных выражения имеют то же значение - например. будут совпадать с теми же строками?

/\bword\b/ 
/(^|\W)word(\W|$)/m #when multi-line is turned on 
/(\A|\W)word(\W|\z)/ 

с просьбой, потому что \b означает слова граничного. Слово \w+, поэтому \b должно быть любым, что не является \w, например. это должно быть \W или начало или конец строки или строки. (или нет?) (не считая групп захвата, вероятно, было бы лучше использовать какой-то не захватывающий внешний вид).

и эти два?

/word\B/ 
/word\w/ 

Если слово должно быть «nonword-граница» в конце концов, это означает, что изолейцина в слово должен сопровождаться \w (слова) характер. (Или нет?)

+0

Btw, '/ (^ | \ W) word (\ W | $) /', '/ (^ | \ W) word (\ W | $)/m','/(\ A | \ W) word (\ W | \ z)/'и'/(\ A | \ W) слово (\ W \ \ z)/m' совпадают с одним и тем же. – ikegami

+0

@ikegami hm ... Снова я понимаю что-то не так. ; (К этому моменту я думаю, что '/ some $ /' не будет соответствовать 'some \ nstring', но'/some $/m' будет, а '/ some \ z /' никогда не будет соответствовать ' «some \ nstring» 'независимо от' m' .Что я пропустил? Должен ли я задать новый вопрос? – kobame

+0

@ikegami YES, теперь получил (надеюсь)! когда 'm' отсутствует, новая строка соответствует '\ W'. – kobame

ответ

4

(игнорировать пробелы в следующих шаблонов. Я предположил /x используется для удобочитаемости.)


\b 

эквивалентно

(?<!\w)(?=\w) | (?<=\w)(?!\w) 

так

\b word \b 

эквивалентно

(?: (?<!\w)(?=\w) | (?<=\w)(?!\w)) word (?: (?<!\w)(?=\w) | (?<=\w)(?!\w)) 

, который упрощает для

(?<!\w) word (?!\w) 

Что вы предположили, что эквиваленты немного отличаются друг от друга.


\B 

эквивалентно

(?<=\w)(?=\w) | (?<!\w)(?!\w) 

так

word \B 

эквивалентно

word (?: (?<=\w)(?=\w) | (?<!\w)(?!\w)) 

, который упрощается

word (?=\w) 

Что вы предложили в качестве эквивалента (word\w) немного отличается.

+0

Только интересно, как кто-нибудь может запомнить (и использовать) все эти положительные/отрицательные взгляды за/вперед конструкции ... (Большой ответ, спасибо. и, вероятно, мой следующий qst будет касаться эквивалентности '/ (?!) /' (FAIL) и '/ (? kobame

+3

'(? = .. .) 'означает следующее.' (?! ...) 'означает, что не следует.' (? <= ...) ', которому предшествует.' (? ikegami

3

\bword такое же, как (?<!\w)word и word\b такое же, как word(?!\w)

\Bword равно (?<=\w)word и word\B равна word(?=\w)