Разница между b и B в регулярном выражении


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

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

С помощью regex - bcatb будет соответствовать слово cat а не cat на scattered.

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

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

появляется на вашей цветовой кодировке ключ.

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

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

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

редактировать: также, может кто-нибудь, пожалуйста, объясните с новым примером?

7 68

7 ответов:

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

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

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

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

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

пример: .\b игр c на abc

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

соответствует позиции между двумя символами слова (т. е. позиции между \w\w), а также в позиции между двумя символами без слов (т. е. \W\W).

пример: \B.\B игр b на abc

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

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

считайте, что это строка и шаблон для поиска - это "кошка":

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 thisct thisctmaina"

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

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

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

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

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

теперь, результат "catmania thiscat thisctmaina"

надеюсь, что это помогает :)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

X IX IXI X X X I II IIXX X XII I-I X -X -XX -X-Я-X -X- -я-X -X-Я-X -X-я- X_X _X -


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

XIX IXI XX X I II IIXX XXII I-I X -X -XX -X-Я-X -X- -я-X -X-Я-X -X - I-X_X_X -


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

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-X - X_X _X-


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

XIX яXI XX X I II II XX XXII I-I X-X-X X-x-I I-X - X-I-X-X-I I-X - X-X - X_X_X -


  1. /X\B/g должны не конец со специальным символом или пробелом

X IX IXя XX X I II IIX X 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 должно начаться и не конец со специальным символом или пробелом

X IX IXI XX X I II IIX X 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 ХХІІ я-Я Х-Х -Х Х - Х-я-Х -Х - я-Х -Х-я-Х - Х-я - x_ неX_X -