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


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

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

5 119

5 ответов:

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

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

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

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

во всех вкусах, символы [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"

см.: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_]

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

некоторые полезные сайты регулярных выражений для начинающих или просто намочить ваш аппетит.

я обнаружил, что это очень полезная книга:

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

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