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

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

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

5 ответов

Решение

Метасимвол \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"

Смотрите: http://www.regular-expressions.info/reference.html/

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

\W будет соответствовать любому несловесному символу, поэтому его легко использовать для сопоставления границ слов. Проблема в том, что он не будет соответствовать началу или концу строки. \b больше подходит для соответствия границ слов, так как он также будет соответствовать началу или концу строки. Грубо говоря (более опытные пользователи могут поправить меня здесь) \b можно рассматривать как (\W|^|$), [Редактировать: как @ Ω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],

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

Другие вопросы по тегам