Разница между метасимволами регулярных выражений w и b

может кто-нибудь объяснить разницу между w и b метасимволы регулярных выражений?

насколько я понимаю, оба этих мета-символа используются для границ слов. Кроме того, какой метасимвол эффективен для многоязычного контента?

5 ответов


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

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

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

проще говоря: \b позволяет выполнять "только слово целиком" поиск с помощью регулярного выражения в виде \bword\b. А "слово персонажа" это символ, который может быть использован для формирования слов. Все символы, которые не "слово символов" are "не слово персонажи".

во всех вкусах, символы [a-zA-Z0-9_] несколько символов слова. Они также соответствуют классу символов short-hand \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"

см.:http://www.regular-expressions.info/reference.html/


@Mahender, вы, вероятно, имели в виду разницу между \W (вместо \w) и \b. Если нет, то я бы согласился с @BoltClock и @jwismar выше. В противном случае продолжайте чтение.

\W будет соответствовать любому символу без слова, и поэтому его легко использовать для соответствия границам слов. Проблема в том, что он не будет соответствовать началу или концу строки. \b больше подходит для сопоставления границ слов, поскольку он также будет соответствовать началу или концу строки. Грубо говоря (более опытные пользователи могут исправить меня здесь)\b можно рассматривать как (\W|^|$). [Edit: как @Ωmega упоминает ниже,\b это матч нулевой длины так (\W|^|$) не совсем правильно, но, надеюсь, поможет объяснить разницу]

быстрый пример: для строки Hello World, .+\W будет соответствовать Hello_ (с пробелом), но не будет соответствовать World. .+\b будет соответствовать как Hello и World.


\b <= this is a word boundary.

соответствует позиции, за которой следует символ слова, но не предшествует символу слова или которой предшествует символ слова, но не следует символ слова.

\w <= stands for "word character". 

Он всегда соответствует символам ASCII [A-Za-z0-9_]

есть ли что-то конкретное, что вы пытаетесь сопоставить?

некоторые полезные сайты regex для начинающих или просто намочить аппетит.

Я нашел, что это очень полезная книга:


\w is не граница слова, она соответствует любому символу слова, включая подчеркивания:[a-zA-Z0-9_]. \b is граница слова, то есть она соответствует позиции между словом и не буквенно-цифровым символом:\W или [^\w].

эти реализации могут варьироваться от языка к языку.