Границы слов с расширенным набором символов - PullRequest
1 голос
/ 16 декабря 2011

Мне кажется немного странным, что \w соответствует [a-zA-Z0-9_].Интересно, почему 0-9 и _ считаются между символами слова и почему - не учитывается между символами слова.

Если я хочу разбить предложение:

This is counter-example.

с (\w*\b) разделит слово контрпример на две части.Аналогично (count.*?\b) соответствует только counter.

Возможно ли иметь что-то вроде \b, в результате чего - будет включено в символы слова (\w)?

Или я неправильно понял использование \b?Есть ли примеры стандартного использования этого?

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Тот факт, что \w соответствует подчеркиванию вместе с заглавными и строчными буквами, является историческим: это связано с тем, что он был впервые введен для соответствия идентификаторам C.

Что ж, это верно для Java\w (да, \w не будет соответствовать выделенным символам в Java).

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

На самом деле нет привязки, которая делает то, что вы хотите, но если вы хотите сопоставить слова и тире, ваша лучшая ставка - \w*(-\w*)*.

Опять же, шаблон normal* (special normal*)*!

(и, кстати, \b является «якорем для слов» только в некоторых диалектах, другие реализации определяют \< и \>вместо этого для начала и конца якоря слова соответственно)

[редактировать для грубой ошибки]

1 голос
/ 16 декабря 2011

Используйте это: [\w-]*

Например, вы хотите сопоставить что-то, что заканчивается на e и начинается с co

Строка:

This is counter-example.

Regex:

co[\w-]*e

Match:

counter-example
...