Это потому, что escape-последовательность \b
означает границу слова.Слово определяется в соответствии с руководством по PHP следующим образом: « Символ« слово »- это любая буква или цифра или символ подчеркивания, то есть любой символ, который может быть частью« слова »Perl. ".
Граница слова означает границу между словом и несловом.Другими словами, между символом, который является символом слова, и символом не является символом слова.Проблема в том, что #
не является символом слова.Таким образом, если за #
не следует символ слова, #\b
никогда не будет соответствовать.
Возможно, вам следует более четко определить с помощью классов символов то, что вы хотите.Например, /\bc#(?![a-z])/i
(то есть C #, за которым не следует диапазон символов az)