2017-05-31 41 views
0

我試圖檢查正則表達式'\b<word>\b'特定單詞的存在的字符串,但似乎\b錨不REGEXP_SUBSTR工作:檢查單詞的字符串存在由Oracle REGEXP_SUBSTR

例如檢查一個字ABC

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

但這裏的結果是(null)。我做錯了什麼?

+0

你想用'\ B'做的一個空間?你只需要得到'ABC',不包括例如'xABC','ABCy','xABCY'? – Aleksej

+0

是的,我想檢查整個單詞 - 在我的情況下,單詞'ABC',而不是字符串'ABC'作爲單詞'ABCD'的一部分。 – shaf

回答

0

要檢查一個字符串是否包含給定的單詞,並且假設只能分隔字符串中的兩個單詞的唯一字符是逗號和空格,則只需處理這兩個字符即可在開頭的字符串的結尾:

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

它是如何工作的:

(^| |,)意味着這個詞可以用前面加什麼(字符串的開頭),由逗號或空間;

同樣(,|$|)意味着該字後面可以跟一個逗號,沒有什麼(該字符串的結尾)或

+0

謝謝,它的工作原理!但是爲什麼我不能用'\ b'錨來匹配一個字的邊界位置:'\ bABC \ b'? – shaf