如何转义像'[',']','|'这样的字符在regexp_substr oracle中

时间:2014-01-14 18:10:59

标签: oracle escaping character

我需要替换像这样的东西:

some random characters[[some_randome_characters1|some_randome_characters2]]some random characters

到此:

[link=some_randome_characters]some_randome_characters[/link]

我设法写这个程序:

l_tmp:=regexp_substr(content,'/[{2}(/s|/w|/d)+/|/[{2}(/s|/w|/d)+/]{2}');

...这里我正在做其他事情来建立我的链接。 问题是(/s|/w|/d)+找不到所有匹配项 - >对于具有'。'或'='等的exapmle文本。总而言之,我想改变这一点:

(/s|/w|/d)+

到此:

[^/|/[/]] 

但它不起作用。有没有办法逃脱这3个角色?

2 个答案:

答案 0 :(得分:3)

您正在使用shlash /字符, 但是你必须使用反斜杠\来转义一个字符。

答案 1 :(得分:0)

SQL Fiddle

Oracle 11g R2架构设置

CREATE OR REPLACE FUNCTION extractFirstLink(
  str IN VARCHAR2
) RETURN VARCHAR2 DETERMINISTIC
IS
  m1 VARCHAR2(4000) := REGEXP_SUBSTR( str, '\[\[(.*?)(\|(.*?))?\]\]', 1, 1, NULL, 1 );
  m2 VARCHAR2(4000) := REGEXP_SUBSTR( str, '\[\[(.*?)(\|(.*?))?\]\]', 1, 1, NULL, 3 );
BEGIN
  RETURN '[link=' || m1 || ']' || NVL( m2, m1 ) || '[/link]';
END extractFirstLink;
/

查询1

WITH data AS (
 SELECT 'some random characters[[some_randome_characters1|some_randome_characters2]]some random characters' AS text
 FROM DUAL
)
SELECT extractFirstLink( text )
FROM data

<强> Results

|                                         EXTRACTFIRSTLINK(TEXT) |
|----------------------------------------------------------------|
| [link=some_randome_characters1]some_randome_characters2[/link] |