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


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

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

Author: Ωmega, 2012-08-09

5 answers

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

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

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

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

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

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

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

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

 216
Author: Ωmega, 2015-02-04 23:58:38

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

 20
Author: jwismar, 2015-08-10 20:24:41

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

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

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

 6
Author: mtariq, 2012-08-09 01:33:23
\b <= this is a word boundary.

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

\w <= stands for "word character". 

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

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

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

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

 4
Author: james emanon, 2013-12-24 12:02:19

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

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

 2
Author: Julián Urbano, 2013-12-19 04:20:18