Томалак прибил его - речь идет о сопоставлении границ слов. Я понял это и удалил вопрос, но совет Уилла, чтобы он оставался открытым для других, звучит разумно.
\b
фактически был виновником.
Один из выводов может состоять в том, что для чего угодно, кроме самого элементарного (то есть ASCII) использования, встроенные удобные выражения из Java фактически бесполезны. Например. \w
соответствует только символам ASCII, \b
основано на этом и т. Д.
FWIW, мой RegExp оказался:
(?:^|[\p{P}\p{Z}])(\QThe $earch Term\E)(?:[\p{P}\p{Z}]|$)
где The $earch Term
- текст, который я пытаюсь найти.
\p{}
- это категории Unicode. По сути, я разбиваю свое слово на любом символе в символьных категориях Юникода (P
) или Разделителя (Z
). Кроме того, учитываются начало и конец ввода (с ^
и $
), а граничные маркеры помечаются как группы без захвата (биты (?:...)
), в то время как фактический поисковый термин указан с \Q
и \E
& помещены в соответствующую группу.