I am having a problem with matching word boundaries with REGEXP_LIKE. The following query returns a single row, as expected.
select 1 from dual
where regexp_like('DOES TEST WORK HERE','TEST');
But I want to match on word boundaries as well. So, adding the "\b" characters gives this query
select 1 from dual
where regexp_like('DOES TEST WORK HERE','\bTEST\b');
Running this returns zero rows. Any ideas?
I believe you want to try
select 1 from dual
where regexp_like ('does test work here', '(^|\s)test(\s|$)');
because the \b
does not appear on this list: Perl-influenced Extensions in Oracle Regular Expressions
The \s
makes sure that test starts and ends in a whitespace. This is not sufficient, however, since the string test
could also appear at the very start or end of the string being matched. Therefore, I use the alternative (indicated by the |
) ^
for start of string and $
for end of string.
Update (after 3 years+)...
As it happens, I needed this functionality today, and it appears to me, that even better a regular expression is (^|\s|\W)test($|\s|\W)
(The missing \b regular expression special character in Oracle).