Разница между \ b и \ B в регулярном выражении - PullRequest
87 голосов
/ 12 июля 2011

Я читаю книгу по регулярным выражениям, и я наткнулся на этот пример для \b:

Кошка разбросала свою еду по всей комнате.

Использование regex - \bcat\b будет соответствовать слову cat, но не cat в scattered.

Для \B автор использует следующий пример:

Пожалуйста, введите девятизначный идентификатор, так как он

отображается на вашем цветном кодовом ключе.

Использование регулярного выражения \B-\B соответствует - между словом color - coded.Использование \b-\b с другой стороны соответствует - в nine-digit и pass-key.

Как в первом примере мы используем \b для разделения cat, а во втором * \B для разделения -?Использование \b во втором примере противоположно тому, что было сделано ранее.

Пожалуйста, объясните мне разницу.

РЕДАКТИРОВАТЬ: Кроме того, кто-нибудь может объяснить, пожалуйста, с новым примером?

Ответы [ 7 ]

72 голосов
/ 12 июля 2011

Путаница проистекает из вашего мышления \b соответствует пробелам (возможно, потому что "b" означает "пусто").

\b соответствует пустой строке в начале или конце слова .\B соответствует пустой строке не в начале или в конце слова.Ключевым моментом здесь является то, что «-» не является частью слова.Таким образом, <left>-<right> соответствует \b-\b, поскольку по обе стороны от - есть границы слов.С другой стороны, для <left> - <right> (обратите внимание на пробелы) нет границ слов по обе стороны от тире.Границы слова - это один пробел слева и справа.

С другой стороны, при поиске \bcat\b границы слова ведут себя более интуитивно, и это соответствует "cat", как и ожидалось.

52 голосов
/ 12 июля 2011

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

Соответствует в позиции между символом слова (что-либо, совпадающее с \ w) и несловесным символом (что-либо, совпадающее с [^ \ w] или \ W), а также в начале и / или конце строки если первый и / или последний символ в строке являются символами слова.

Пример: .\b совпадений c в abc

\B - граница неслова нулевой ширины. В частности:

Соответствует положению между двумя символами слова (то есть положению между \ w \ w), а также положению между двумя несловесными символами (т.е. \ W \ W).

Пример: \B.\B совпадений b в abc

См. регулярные-выражения.info для более подробной информации о регулярных выражениях

25 голосов
/ 11 апреля 2016

С другим примером:

Учтите, что это строка и шаблон, который нужно найти, это 'cat':

text = "catmania thiscat thiscatmaina";

Теперь определения,

'\ b' находит / соответствует шаблону в начале или конце каждого слова.

'\ B' не находит / не соответствуетшаблон в начале или конце каждого слова.

Различные случаи:

Случай 1: В начале каждого слова

result = text.replace(/\bcat/g, "ct");

Теперь результат "ctmania thiscat thiscatmaina"

Случай 2: В конце каждого слова

result = text.replace(/cat\b/g, "ct");

Теперь результатом является "catmania thisct thiscatmaina"

Случай 3: Не в начале

result = text.replace(/\Bcat/g, "ct");

Теперь результатом является "catmania thisctthisctmaina "

Случай 4: Не в конце

result = text.replace(/cat\B/g, "ct");

Теперь результат" ctmania thiscat thisctmaina "

Случай 5: Ни начала, ни конца

result = text.replace(/\Bcat\B/g, "ct");

Сейчас,результат "catmania thiscat thisctmaina"

Надеюсь, это поможет:)

7 голосов
/ 12 июля 2011

Метасимвол \ b является якорем, похожим на каретку и знак доллара.Он совпадает в позиции, которая называется «граница слова».Это совпадение имеет нулевую длину.

Существует три различных положения, которые квалифицируются как границы слов:

  • Перед первым символом в строке, если первый символ является символом слова.
  • После последнего символа в строке, если последний символ является символом слова.
  • Между двумя символами в строке, где один является символом слова, а другой - не символом слова,

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

Источник: http://www.regular -expressions.info / wordboundaries.html

3 голосов
/ 12 июля 2011

\b соответствует границе слова.\B соответствует границам, не связанным со словами, и эквивалентно [^\b](?!\b) (спасибо @ Alan Moore за исправление!) .Оба имеют нулевую ширину.

Подробнее см. http://www.regular -expressions.info / wordboundaries.html .Сайт чрезвычайно полезен для многих основных вопросов регулярных выражений.

0 голосов
/ 25 марта 2017

Пусть возьмем строку вроде:

XIX IXI XX X I II IIXX XXII I-I X-X -X X-X-I I-X -X- -I-X-X-I I-X-X-I- X_X _X-

Примечание: Подчеркивание (_) в этом случае не считается специальным символом.

  1. /\bX\b/g Должен начинаться и заканчиваться специальным символом или пробелом

XIX IXI XX X I II IIXX XXII II X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X_X _X-


  1. /\bX/g Должен начинаться со специального символа или пробела

X IX IXI X X X I II IIXX X XII II X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X _X _X-


  1. /X\b/g Должен заканчиваться специальным символом или пробелом

XI X IXI X X X I II IIX X XXII II X - X - X X - X -I I- X - X - -I- X - X -I I- X - X -I- X_ X _ X -


  1. /\BX\B/g
    Должен не начинаться и не заканчиваться специальным символом или пробелом

XIX I X I XX XI II II X XX X II II XX-X X-XI IX -X- -IX -XI IX- XI- X_X _X-


  1. /\BX/g Если не начинаться со специального символа или пробела

XI X I X IX X XI II II XX X X II II XX-X X-XI IX -X- -IX -XI IX- XI- X_ X _ X -


  1. /X\B/g Если не заканчивается специальным символом или пробелом

X IX I X I X XXI II II X X XX II II XX-X X-XI IX -X- -IX -XI IX- XI- X _X _X-


  1. /\bX\B/g Должен начинаться, а не заканчиваться специальным символом или пробелом

X IX IXI X XXI II II X X X XII II XX-X X-XI IX -X- - IX-XI IX-XI- X _X _X-


  1. /\BX\b/g Должен не начинаться и должен заканчиваться специальным символом или пробелом

XI X IXI X X XI II IIX X XXII II XX-X X-XI IX -X- -IX -XI IX- XI- X_ X _ X -

0 голосов
/ 12 июля 2011

\B - это , а не \b, например. отрицательный \b

pass-key здесь нет границы слова рядом с -, поэтому она соответствует \B в вашем первом примере есть граница слова рядом с cat, поэтому она соответствует \b

аналогичные правила распространяются и на других. \W отрицательно от \w \UPPER CASE отрицательно от \LOWER CASE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...