通过 Oracle REGEXP_SUBSTR 检查字符串中是否存在单词
Check for a presence of word in string by Oracle REGEXP_SUBSTR
我试图通过正则表达式 '\b<word>\b'
检查字符串是否存在特定单词,但似乎 \b
锚点在 REGEXP_SUBSTR 中不起作用:
例如检查单词 ABC
:
SELECT REGEXP_SUBSTR ('A, AB, ABC,ABCD', '\bABC\b') FROM DUAL;
但是这里的结果是(null)。我做错了什么?
要准确地检查字符串是否包含给定的单词,并假设字符串中唯一可以分隔两个单词的字符是逗号和 space,您需要做的就是处理这些两个字符,甚至想到字符串的开头和结尾:
SELECT 1 from dual
where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )')
工作原理:
(^| |,)
表示单词前面可以没有任何内容(字符串的开头)、逗号或 space;
类似地(,|$| )
表示单词后面可以跟一个逗号,什么都没有(字符串的结尾)或者一个space
我试图通过正则表达式 '\b<word>\b'
检查字符串是否存在特定单词,但似乎 \b
锚点在 REGEXP_SUBSTR 中不起作用:
例如检查单词 ABC
:
SELECT REGEXP_SUBSTR ('A, AB, ABC,ABCD', '\bABC\b') FROM DUAL;
但是这里的结果是(null)。我做错了什么?
要准确地检查字符串是否包含给定的单词,并假设字符串中唯一可以分隔两个单词的字符是逗号和 space,您需要做的就是处理这些两个字符,甚至想到字符串的开头和结尾:
SELECT 1 from dual
where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )')
工作原理:
(^| |,)
表示单词前面可以没有任何内容(字符串的开头)、逗号或 space;
类似地(,|$| )
表示单词后面可以跟一个逗号,什么都没有(字符串的结尾)或者一个space