Почему ваше регулярное выражение неверно
Ваше регулярное выражение будет соответствовать любому bn
, несмотря ни на что. Поскольку заголовок находится перед (bn)
, он всегда будет иметь значение true
(благодаря @ WiktorStribiżew).
Однако даже в правильном положении (bn)(?!\d+)
будет соответствовать любому bn
, за которым не следуют цифры (positive/negative lookarounds
).
Таким образом, все они будут сопоставлены:
sj bn bn bn bn bn
somethingbn
Это не то, что вы хотите.
Решение
Насколько я понимаю, вам нужно совпадать только с bn
, который ставится после нескольких цифр. Почему бы вам просто не пойти с:
\d+(bn)
выход
325bn ---> Match
325 bn
424bn ---> Match
sj bn bn bn bn bn
somethingbn
Демо
Решение с позитивным взглядом
Как уже упоминалось @revo, было бы полезно иметь решение, использующее lookaround, чтобы иметь представление о том, как оно работает.
(?<=\d)bn
Это positive lookbehind
. Это говорит механизму регулярных выражений временно отступить назад в строке, чтобы проверить, может ли текст внутри взгляда быть сопоставленным там .