Если я хочу \bfoo\b
все вхождения слова foo
, я бы использовал \bfoo\b
или без последнего? Кажется, и то, и другое работает, но что правильно?
Вам нужно будет использовать оба. Без последнего \b
вы получите соответствие по строкам, таким как:
"I love football" "You foolishly left off your second word boundary"
Однако обратите внимание, что определение границы слова \b
основано на определении для \w
: граница слова определена, когда она находится между символом несловного слова и символом слова, где символ слова определяется символом \w
. \w
для строки ASCII эквивалентна [A-Za-z0-9_]
, поэтому \bfoo\b
также отклоняет такие случаи, как:
foo123 3foo foo_bar fun_foo
Поскольку числа и _
считаются символами слов, если они правы рядом с foo
, он не образует границы слова, поэтому \bfoo\b
не будет соответствовать ни одному из вышеперечисленных.
Учитывая следующий ввод:
foo foobar
Это регулярное выражение будет соответствовать только первому foo
:
\bfoo\b
Это регулярное выражение будет соответствовать первому, а также foo
in foobar
:
\bfoo