Oracle
字元集中的 Oracle regexp_like 方括號
這個問題是關於 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 正則表達式支持:
$$ $$ 用於指定匹配列表的括號表達式,該列表應匹配列表中表示的任何一個表達式。不匹配的列表表達式以抑揚符 (^) 開頭,並指定與列表中表示的表達式以外的任何字元匹配的列表。
要在方括號表達式中指定右方括號 (]),請將其放在列表的第一個位置(如果有的話,在初始的抑揚符 (^) 之後)。
要在括號表達式中指定連字元,請將其放在列表的第一個位置(在初始的抑揚符 (^) 之後,如果有的話)、最後一個或作為範圍表達式中的結束範圍點。