Oracleで正規表現パターンの特殊文字をエスケープするには?
たとえば、翻訳する関数が必要です
some.string[with(special)reg-exp]characters
に
some\.string\[with\(special\)reg\-exp\]characters
.
PHP では preg_escape() を使用します。オラクルに対応するものはありますか?
なぜ私はこれをしているのですか?
string
aが上にあるかどうかをチェックする pl/sql 関数を作成しようとしていlist,of,string,elements
ます。
これが私のコードです:
CREATE OR REPLACE
FUNCTION list_contains(needle_ IN VARCHAR2,
haystack_ IN VARCHAR2,
separator_ IN VARCHAR2 DEFAULT ',')
RETURN INTEGER
IS
BEGIN
IF regexp_like(haystack_, '(^|' || separator_ || ')' || needle_ || '(' || separator_ || '|$)') THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END list_contains;
関数は基本的に機能します:
list_conains('eve','john,eve,maria,steve') => 1
問題は、正規表現で特別な意味を持つ orneedle_
などseparator_
の奇妙な値でそれを呼び出そうとしたときです。.
list_conains('eve','john.maria.steve','.') => 1
ご覧のとおり、リストに eve はありませんが、は steve の名前の文字と.
一致するため、関数は誤って を返します。t
1
ドットを手動で置き換えることができることはわかっていますが、干渉する正規表現の特殊文字が他にもたくさんあるので、自分ですべての文字をリストしようとはしません。
needle_とseparator_をエスケープするには?