我在甲骨文SQL測試正則表達式的工作,並發現了一些我無法理解:甲骨文REGEXP_LIKE無法如預期那樣
-- NO MATCH
SELECT 1 FROM DUAL WHERE REGEXP_LIKE ('Professor Frank', '(^|\s)Prof[^\s]*(\s|$)');
以上不匹配,而下面的比賽:
在其他正則表達式中,它將類似於\bProf[^\s]*\b
與\bProf\S*\b
並且具有類似的結果。注意:Oracle SQL正則表達式不具有\b
或字邊界。
問:爲什麼[^\s]*
和\S*
在Oracle SQL中以相同的方式工作?
我注意到如果我在最後刪除(\s|$)
,第一個正則表達式將匹配。
如果用第一個示例中的空格替換字符類中的\ s,它將按預期工作。有趣的是,我希望在\ s中包含一個空格字符! –
嘗試從字符串中跳出反斜槓,例如'\\ s' – Barmar
\ s是空格的轉義序列,但不是匹配的字符集(即[.....])。在匹配字符集中,只有兩個字符具有特殊含義, - 對於範圍和]用於關閉範圍。他們不能逃脫;如果在匹配集中需要,]必須始終是第一個字符,並且 - 必須是第一個或最後一個(最好將它始終保留到匹配集的末尾)。 – mathguy