2014-12-31 2 views
2

Теперь я совершенно смущен.В чем разница между b и >, <в regex?

Я нашел это в регулярном выражении шпаргалки

\b word boundary 
\< start of word 
\> end of word 

Но в "Mastering Regular Expression" книга, он сказал мне, что

\< word boundary 
\> word boundary 

В чем разница между \b и \>\< in rege Икс?

+0

Предлагаю вам попробовать выражения. Вам просто нужен текстовый редактор, консольная программа или один из бесплатных веб-сайтов для их проверки. Помните, что регулярное выражение регулярных выражений зависит от двигателя, то есть от программы. – Smandoli

+2

Какой именно язык? Могут быть небольшие различия между регулярными выражениями языков программирования – ryanyuyu

+1

@Smandoli Спасибо за ваше предложение, но моя цель этого вопроса в теоретическом плане - не практический термин. – fronthem

ответ

3

Резюме

\b word boundary 
\< word boundary; specifically, word boundary followed by a word; ie, start of word 
\> word boundary; specifically, word followed by word boundary; ie, end of word 

Если у вас есть такое слово, как «боб», то граница шаблон \b слово возвратит два нулевых длины матчи, которые эквивалентны в начале и в конце слово. Это полезно, потому что позволяет выбирать слова в строках. Таким образом, строка «foo bar», сопоставленная с \b, имеет четыре пустых совпадения для начала-начала-начала двух слов.

Основываясь на этом, вы можете видеть, что \< предоставит вам позиции только начала слов (2 матча для начала foo и начала бара) и \> концы слов (два матча для конца foo и конца бара).

Таким образом, вы можете приравнять \b к \< так:

\< 
is equivalent to 
    start-of-word 
is equivalent to 
    word-boundary-followed-by-word 
is equivalent to 
    \b(?=\w) 

Я думаю, что ваш «Mastering Regular Expression» Книга затем немного расплывчит, и описывает \< и \> как границы слова, когда оно должно быть более точным и отличать их как «граница слова (специально для начала слова)» и «граница слова (особенно для конца слова)» соответственно.

Python Пример:

>>> re.compile(r'\b').findall('foo bar') 
['', '', '', ''] 
>>> re.compile(r'\b(?=\w)').findall('foo bar') 
['', ''] 

Обратите внимание, что питон не поддерживает \< и \>. И вот пример того, почему границы слов полезны. Мы можем выбрать BAR, который является целым словом, а не обернутым внутри foo:

>>> re.compile(r'\bBAR\b').findall('foBARo BAR') 
['BAR'] 
+0

IMO, я думаю, '\ b' - это граница слова, которая либо следует за словом, либо следует за словом; '\ <' - граница слова, за которой следует слово; '\>' - граница слова, которая следует за словом; – fronthem

+0

yep, именно это. – sifriday

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