В общем, я бы придерживался решения Рене, за исключением случаев, когда нужно, чтобы совпадение было нулевой длины.т.е. вы не хотите фактически захватывать несловесный символ в начале / конце.
Например, если наша строка равна test test
, то (\b)test(\b)
будет совпадать дважды, но (^|\s|\W)test($|\s|\W)
будет совпадать толькопервое вхождениеПо крайней мере, это так и есть, если вы попытаетесь использовать regexp_substr.
Пример
SELECT regexp_substr('test test', '(^|\s|\W)test($|\s|\W)', 1, 1, 'i'),
regexp_substr('test test', '(^|\s|\W)test($|\s|\W)', 1, 2, 'i') FROM dual;
Возвращает
test |NULL