С границами слов (\ b) в RegEx мне нужно иметь его до И после слова или раньше?

Если я хочу \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