Как работает \b при использовании регулярных выражений?

Если у меня есть предложение, и я хочу показать слово или все слова после того, как перед ним подобрано определенное слово, например, я хотел бы отобразить слово fox после brown The quick brown fox jumps over the lazy dog, я знаю, что я могу выглядеть позитивно (?<=brown\s)(\w+) однако я не совсем понимаю использование \b в экземпляре (?<=\bbrown\s)(\w+). Я использую http://gskinner.com/RegExr/ в качестве моего тестера.

Ответ 1

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

Граница слова \b соответствует изменению от \w (символа слова) до символа \w несловного символа или от \w до \w

Какие символы включены в \w, зависит от вашего языка. По крайней мере, есть все буквы ASCII, все ASCII-номера и символ подчеркивания. Если ваш механизм регулярных выражений поддерживает unicode, возможно, все буквы и числа в \w имеют букву или номер свойства юникода.

\w - все символы, которые НЕ находятся в \w.

\bbrown\s

будет соответствовать здесь

The quick brown fox
         ^^

но не здесь

The quick bbbbrown fox

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

Если ваше регулярное выражение приходит к \b, оно переходит к следующему char, то есть b от коричневого. Теперь \b знает, что на правой стороне, слово char == > the b. Но теперь нужно оглянуться назад, чтобы \b стал ИСТИННЫМ, перед b должен быть символ без слова. Если есть пробел (то есть не в \w), то \b перед b является истинным. НО, если есть еще один b, тогда его false, а затем \bbrown не соответствует "bbrown"

Регулярное выражение brown будет соответствовать обеим строкам "быстрый коричневый" и "bbrown" , где регулярное выражение \bbrown соответствует только "быстрому коричневому" и не "bbrown"

Подробнее см. здесь www.regular-expressions.info

Ответ 2

Символ \b является особым. Это не соответствует характеру. То, что он делает, это соответствие любой позиции, которая лежит на границе слова (где "слово" в этом случае - это все, что соответствует \w). Таким образом, шаблон (?<=brown\s)(\w+) будет соответствовать "bbbbrown fox", но (?<=\bbrown\s)(\w+) не будет, поскольку позиция между "bb" и "brown" находится посредине слова, а не на его границе.

Ответ 3

\ b гарантирует, что коричневый цвет находится на границе слова, эффективно исключая шаблоны, такие как

blackandbrown

Ответ 4

Вам не нужен внешний вид, вы можете просто использовать:

(\bbrown\s)(\w+)

Ответ 5

\ b является "границей слов" и является позицией между началом или концом слова, а затем "не-словными" символами.

Его основное использование - упростить выбор целого слова до \bbrown\s будет соответствовать:

^ коричневый  коричневый 99brown _brown

Его более или менее эквивалентно "\ W *", за исключением случаев, когда "захват" строк как "\ b" соответствует началу слова, а не символу без слова, предшествующему или следующему за словом.

Ответ 6

\b - это соответствие нулевой ширины границы слова.

(Либо начало конца слова, где "слово" определяется как \w+)

Примечание: "нулевая ширина" означает, что \b находится в пределах регулярного выражения, которое соответствует, оно не добавляет никаких символов в текст, захваченный этим совпадением. т.е. регулярное выражение \bfoo\b при совпадении будет захватывать только "foo" - хотя \b способствовало тому, как foo был сопоставлен (т.е. как целое слово), он не вносил никаких символов.

Ответ 7

Граница слов - это позиция, которая либо предшествует символу слова, либо не сопровождается символом слова или не предшествует символу слова. Это эквивалентно этому:

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

... или это должно быть. См. этот вопрос для всего, что вам когда-либо хотелось узнать о границах слов.;)