【问题标题】:how to escape characters like '[', ']', '|' in regexp_substr oracle如何转义像'[',']','|'这样的字符在 regexp_substr oracle
【发布时间】:2014-02-02 22:38:37
【问题描述】:

我需要像这样替换一些东西:

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)+ 找不到所有匹配项-> 例如具有“。”或“=”等的文本。总而言之,我想改变这一点:

(/s|/w|/d)+

到这里:

[^/|/[/]] 

但它不会工作。有什么办法可以逃脱这 3 个字符?

【问题讨论】:

    标签: oracle escaping character


    【解决方案1】:

    您正在使用斜杠/ 字符, 但您必须使用反斜杠 \ 转义字符。

    【讨论】:

      【解决方案2】:

      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] |
      

      【讨论】:

        猜你喜欢
        • 2012-09-18
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        • 1970-01-01
        相关资源
        最近更新 更多