如何在 Oracle 中转义正则表达式模式的特殊字符?
例如,我需要一个可以翻译的函数
some.string[with(special)reg-exp]characters
至
some\.string\[with\(special\)reg\-exp\]characters
.
在 PHP 中我会使用 preg_escape()。有Oracle对应的吗?
我为什么要这样做?
我正在尝试编写一个 pl/sql 函数来检查 astring
是否在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
问题是当我尝试用needle_
or的奇怪值来调用它时separator_
,例如.
在正则表达式中具有特殊含义的其他字符串。
list_conains('eve','john.maria.steve','.') => 1
如您所见,列表中没有 eve,但.
匹配t
steve 姓名的字母,因此函数错误地返回1
。
我知道我可以手动替换这些点,但是仍然有很多其他正则表达式特殊字符会干扰,我不想自己尝试列出所有字符。
如何逃脱needle_和separator_?