Разница между 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 ответов:
путаница проистекает из вашего мышления
\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 -
Примечание: подчеркивание ( _ ) в этом случае не считается специальным символом.
/\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 -
/\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 -
/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 -
/\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-
/\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 -
/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-
/\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 -
/\BX\b/g
должны не начало и должно закончиться специальным символ или пробелXIX IXI XX X I II IIXX ХХІІ я-Я Х-Х -Х Х - Х-я-Х -Х - я-Х -Х-я-Х - Х-я - x_ неX_X -