2013-08-18 2 views

ответ

3

\b соответствует границе слова. Таким образом, регулярное выражение соответствует «Aa», но не «AaB», потому что между «a» и «B» во второй строке нет границы слова; то есть они являются частью одного и того же слова.

См. Perl doc on zero-width assertions.

Вторая соответствует строке, содержащей два одинаковых символа в любом месте. Это работает, потому что \1 соответствует любому персонажу, который соответствует (.), который соответствует любому одиночному символу (.) и запоминает его как \1 (это ( ... )). Значение .* означает, что между ними может быть что угодно («ноль или больше символов»).

Таким образом, «Абра» спички (\1 является «а»), как это делает «сумматор» (\1 это «d», и .* соответствует нулю символов), но не «черный».

+0

Регулярное выражение соответствует 'Aab' из-за' [a-z] * ' – Toto

+0

Спасибо, @ M42. Исправлена. –

3

Регулярное выражение /\b[A-Z][a-z]*\b/ выполняет поиск заглавных букв, содержащих только буквенные символы ASCII. Примеры:

Foo B Ba Bar 

, но не

bAr FOO foo BAR Føø BäÞ b 

\b является нулевой шириной утверждения, что соответствует только границ слов, где «символ слова» \w и не-символ слова является смежными , Это эквивалентно просмотровые обходные

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

\1 является backref захваченной группы, и соответствует буквальному содержанию этой группы. Это регулярное выражение позволяет нам соответствовать строке foo цитируемый либо двойные или одинарные кавычки:

/(["'])foo\1/ # "foo" and 'foo' but not "foo' or 'foo" 

Это соответствует либо двойные или одинарные кавычки и запоминает. После foo именно этот символ должен появиться снова. Ваше регулярное выражение является более общей формой, где foo может быть чем угодно, а символом цитирования может быть что угодно. Это находит первую длинную строку, не связанную с новой строкой, которая заключена в символ, например. в

:"':foo':" 

:"':foo': это соответствует, поскольку она является самой длинной строки, например на первой позиции.