Проверьте наличие слова в строке с помощью Oracle REGEXP_SUBSTR

Я пытался проверить строку на наличие определенного слова по регулярному выражению '\b<word>\b', но кажется, что \b якорь не работает в REGEXP_SUBSTR:

Например, проверить слово ABC:

SELECT  REGEXP_SUBSTR ('A, AB, ABC,ABCD', '\bABC\b') FROM DUAL;

но результат здесь (ноль). Что я делаю не так?

1 ответ

Чтобы точно проверить, содержит ли строка заданное слово, и при условии, что единственными символами, которые могут разделять два слова в строке, являются запятая и пробел, все, что вам нужно сделать, это обработать эти два символа, даже подумав о начале и конец строки:

SELECT 1 from dual
where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )')

Как это устроено:

(^| |,) означает, что слову может предшествовать ничто (начало строки), запятая или пробел;

так же (,|$| ) означает, что за словом может следовать запятая, ничего (конец строки) или пробел

Другие вопросы по тегам