Может ли кто-нибудь объяснить разницу между метасимволами \b
и \w
регулярными выражениями? Насколько я понимаю, оба этих метасимвола используются для обозначения границ слов. Кроме того, какой метасимвол эффективен для многоязычного контента?
Ответы:
Метасимвол \b
- это якорь, такой как каретка и знак доллара. Он соответствует позиции, называемой «границей слова» . Это совпадение нулевой длины.
Существуют три различных положения, которые квалифицируются как границы слова:
Проще говоря: \b
позволяет выполнять поиск «только слова целиком» с использованием регулярного выражения в форме \bword\b
. «Буквенный символ» является символом , который может быть использован для образования слов. Все символы, которые не являются "словесными символами", являются "несловесными символами" .
Во всех вариантах символы [a-zA-Z0-9_]
являются словесными символами. Им также соответствует класс сокращенных символов \w
. Ароматизаторы, показывающие «ascii» для границ слов при сравнении вкусов, распознают только эти символы как символы слова.
\w
обычно означает "словесный символ"[A-Za-z0-9_]
. Обратите внимание на наличие символа подчеркивания и цифр.
\B
это отрицательная версия \b
. \B
совпадает во всех позициях, где \b
нет. Фактически, \B
соответствует в любой позиции между двумя символами слова, а также в любой позиции между двумя символами, не являющимися словами.
\W
является сокращением [^\w]
от отрицательной версии \w
.
\w
соответствует словесному символу. \b
- это совпадение нулевой ширины, которое соответствует символу позиции, у которого есть символ слова с одной стороны, и чему-то, что не является символом слова, с другой. (Примеры того, что не является символом слова, включают пробелы, начало и конец строки и т. Д.)
\w
матчи a
, b
, c
, d
, e
, и f
в "abc def"
\b
матчах (нулевая ширина) положение до того a
, после того, как c
перед d
и после того, как f
в"abc def"
\b
утверждение нулевой ширины; он не соответствует символу , он соответствует позиции .
@Mahender, вы, наверное, имели в виду разницу между \W
(вместо\w
) и \b
. Если нет, то я соглашусь с @BoltClock и @jwismar выше. В противном случае продолжайте чтение.
\W
будет соответствовать любому символу, не являющемуся словом, поэтому его легко попытаться использовать для соответствия границам слова. Проблема в том, что он не соответствует началу или концу строки. \b
больше подходит для сопоставления границ слова, так как он также соответствует началу или концу строки. Грубо говоря (более опытные пользователи могут меня здесь поправить) \b
можно представить как (\W|^|$)
. [Edit: как @ Ωmega упоминает ниже, \b
это совпадение нулевой длины, поэтому (\W|^|$)
это не совсем правильно, но, надеюсь, поможет объяснить разницу]
Быстрый пример: Для строки Hello World
, .+\W
будет соответствовать Hello_
(с пространством) , но не будет соответствовать World
. .+\b
будет соответствовать обоим Hello
и World
.
\b
с тем, что означает то же, что и (\W|^|$)
, поскольку (\W|^|$)
будет включать в результат сопоставления символ, не являющийся словом. Вы можете проверить этот факт здесь => regexr.com/3qf98 .
\b
для меня означает то же самое, что и (?<=\W|^|$)
при использовании перед узором, и (?=\W|^|$)
при использовании после узора. Вы можете проверить, о чем я говорю, здесь => regexr.com/3qf9h . Просто сравните с результатом \b
якорей прямо здесь => regexr.com/3qf9t
\b <= this is a word boundary.
Соответствует позиции, за которой следует символ слова, но не предшествует символ слова, или которой предшествует символ слова, но не следует символ слова.
\w <= stands for "word character".
Он всегда соответствует символам ASCII [A-Za-z0-9_]
Есть ли что-то конкретное, что вы пытаетесь сопоставить?
Несколько полезных веб-сайтов с регулярными выражениями для начинающих или просто для того, чтобы подогреть аппетит.
Я нашел эту книгу очень полезной:
\w
он не всегда эквивалентен символам ASCII [A-Za-z0-9_]
- он также будет соответствовать буквенно-цифровым кодовым точкам Unicode и может соответствовать 8-битным символам ISO-Latin-1, если языковой стандарт установлен соответствующим образом .
\w
это не является граница слова, она соответствует любому символу, включая подчеркивание: [a-zA-Z0-9_]
. \b
является границей слова, то есть соответствует положению между словом и не буквенно-цифровым символом: \W
или [^\w]
.
Однако эти реализации могут отличаться от языка к языку.
\w
представляет символ слова , а\b
представляет границу слова между символом слова и символом, не являющимся словом. Это не одно и то же.