Відповіді:
Метахарактер \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/
\b
твердження нульової ширини; він не відповідає персонажу , він відповідає позиції .
@Mahender, ви, мабуть, мали на увазі різницю між \W
(а не \w
) та \b
. Якщо ні, то я погодився б із @BoltClock та @jwismar вище. Інакше продовжуйте читати.
\W
відповідатиме будь-якому неслововому символу, тому його легко спробувати використовувати для відповідності меж слова. Проблема полягає в тому, що він не буде відповідати початку або кінцю рядка. \b
більше підходить для відповідності меж слова, оскільки він також буде відповідати початку або в кінці рядка. Грубо кажучи (більш досвідчені користувачі можуть мене тут виправити) \b
можна вважати як (\W|^|$)
. [Редагувати: як згадується @ Ωmega нижче, \b
це відповідність нульової довжини, тому (\W|^|$)
це не є строго правильним, але, сподіваємось, допомагає пояснити різницю]
Швидкий приклад: Для рядка Hello World
, .+\W
буде відповідати Hello_
(з простором) , але не буде відповідати World
. .+\b
відповідали б Hello
і World
.
\b
значенні того ж самого (\W|^|$)
, оскільки (\W|^|$)
буде містити несловесний символ всередині результату відповідності. Ви можете перевірити цей факт тут => regexr.com/3qf98 .
\b
для мене означає те саме, що (?<=\W|^|$)
коли використовується перед візерунком і (?=\W|^|$)
коли використовується після шаблону. Ви можете перевірити, про що я тут говорю => regexr.com/3qf9h . Просто порівняйте з результатом якірів\b
прямо тут => regexr.com/3qf9t
\b <= this is a word boundary.
Збіг у позиції, за якою слідує символ слова, але не передує символу слова, або якому передує символ слова, але не супроводжується символом слова.
\w <= stands for "word character".
Він завжди відповідає символам ASCII [A-Za-z0-9_]
Чи є щось конкретне, що ви намагаєтеся відповідати?
Деякі корисні веб-сайти для регулярних виразів для початківців або просто щоб змочити апетит.
Я вважав це дуже корисною книгою:
\w
не завжди еквівалентний символам ASCII [A-Za-z0-9_]
- він також відповідатиме буквено-цифровим кодовим кодам Unicode і може відповідати 8-бітовим символам ISO-Latin-1, якщо локаль заданий відповідним чином. .
\w
це НЕ є межа слова, вона відповідає будь-якому символу, включаючи підкреслення: [a-zA-Z0-9_]
. \b
є межею слова, тобто воно відповідає позиції між словом і не буквено-цифровим символом: \W
або [^\w]
.
Ці реалізації можуть відрізнятися від мови до мови.
\w
являє собою символ слова , в той час як\b
являє собою межу слова між символом слова та несловним символом. Вони не те саме.