通过Oracle REGEXP\u SUBSTR检查字符串中是否存在单词

通过Oracle REGEXP\u SUBSTR检查字符串中是否存在单词,regex,oracle,regexp-substr,Regex,Oracle,Regexp Substr,我试图通过正则表达式“\b\b”检查字符串中是否存在特定单词,但似乎\b锚点在REGEXP\u SUBSTR中不起作用: 例如,要查找单词ABC: 但是这里的结果是空的。我做错了什么?要准确地检查字符串是否包含给定的单词,并假设字符串中唯一可以分隔两个单词的字符是逗号和空格,您需要做的就是处理这两个字符,甚至考虑到字符串的开头和结尾: SELECT 1 from dual where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )') 工作

我试图通过正则表达式“\b\b”检查字符串中是否存在特定单词,但似乎\b锚点在REGEXP\u SUBSTR中不起作用:

例如,要查找单词ABC:


但是这里的结果是空的。我做错了什么?

要准确地检查字符串是否包含给定的单词,并假设字符串中唯一可以分隔两个单词的字符是逗号和空格,您需要做的就是处理这两个字符,甚至考虑到字符串的开头和结尾:

SELECT 1 from dual
where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )')
工作原理:

^||,表示该单词可以在字符串的开头加上逗号或空格,前面不加任何内容


类似地,|$|表示单词后面可以跟一个逗号,字符串末尾可以跟一个空格

您想对\b做什么?是否只需要获取ABC,不包括(例如)xABC、ABCy、xABCY?是的,我想检查整个单词-在我的情况下,检查单词“ABC”,而不是作为单词“ABCD”一部分的字符串“ABC”。Oracle正则表达式不支持\b构造。您需要使用^ |[^[^[:alnum:][uu]word$|[^[^[:alnum:][uu]或^ | \Wword$| \w可能重复的谢谢,它可以工作!但是为什么我不能使用锚来匹配单词边界位置:\bABC\b?
SELECT 1 from dual
where REGEXP_LIKE ('A, AB, ABC,ABCD', '(^| |,)ABC(,|$| )')