Oracle

字元集中的 Oracle regexp_like 方括號

  • August 6, 2015

這個問題是關於 Oracle、pl/sql 和 regexp_like 函式的。

我正在嘗試建構一個匹配所有典型特殊字元的字元集。我的字元集目前看起來像:

pattern := '[-~`!@#$%^&*\(\)\\{}_+=|''";:,./?]+';

我想將方括號添加到此字元集中,但是,無論我嘗試添加 ‘]’ 都不起作用。這是一個說明問題的簡單範例:

select
 case when regexp_like('w]ord', '[\]]+') then 'true'
 else 'false' end
from dual;

這將返回 false,這意味著它與 ‘]’ 字元不匹配。奇怪的是,我可以讓 ‘[’ 字元匹配,因為它返回 true:

select
 case when regexp_like('w[ord', '[\[]+') then 'true'
 else 'false' end
from dual;

我認為反斜杠在括號內沒有特殊含義。您可以按原樣使用它:regexp_like('a]b','[]]')或使用or: regexp_like('a]b','([whatever]|\])')

有什麼理由不能用regexp_like('a]b','[^[:alnum:]]')

為什麼不深入閱讀手冊 SQL 語言參考、附錄 D、Oracle 正則表達式支持:

$$ $$ 用於指定匹配列表的括號表達式,該列表應匹配列表中表示的任何一個表達式。不匹配的列表表達式以抑揚符 (^) 開頭,並指定與列表中表示的表達式以外的任何字元匹配的列表。

要在方括號表達式中指定右方括號 (]),請將其放在列表的第一個位置(如果有的話,在初始的抑揚符 (^) 之後)。

要在括號表達式中指定連字元,請將其放在列表的第一個位置(在初始的抑揚符 (^) 之後,如果有的話)、最後一個或作為範圍表達式中的結束範圍點。

引用自:https://dba.stackexchange.com/questions/109288