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

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

Ответы

Ответ 1

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

В качестве границ слов существуют три разных позиции:

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

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

Во всех вариантах символы [a-zA-Z0-9_] являются символами слов. Они также соответствуют короткому классу символов \w. Ароматизаторы, показывающие "ascii" для границ слов в сравнении вкуса, распознают только эти слова как символы слов.

\w обозначает символ "слова, обычно [a-zA-Z0-9_]. Обратите внимание на включение подчеркивания и цифр.

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

\w является коротким для [^\w], отрицательной версии \w.

Ответ 2

\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/

Ответ 3

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

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

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

Ответ 4

\b <= this is a word boundary.

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

\w <= stands for "word character". 

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

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

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

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

Ответ 5

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

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