【问题标题】:Oracle - PCRE to Oracle REGEXOracle - PCRE 到 Oracle 正则表达式
【发布时间】:2021-03-09 15:07:08
【问题描述】:

我想在'@'第一次出现和第二次出现之后提取所有内容:

1331@iwantthis@3ad44@2

在 PCRE 中,我会这样做(至少对于给定的示例):

(?<=\d{4}\@).\w+ 

由于 Oracle DBMS 不支持 PCRE,如何提取所需的子字符串?

【问题讨论】:

    标签: regex oracle pcre


    【解决方案1】:

    在 Oracle 中,您可以使用

    SELECT REGEXP_SUBSTR('1331@iwantthis@3ad44@2', '[^@]+', 1, 2)
    

    请参阅online demo

    这将从字符串中的第一个符号(作为 位置 参数设置为[^@]+ 模式的1),该模式与@ 之外的一个或多个字符尽可能多地匹配。

    查看REGEXP_SUBSTR reference page的更多详情。

    【讨论】:

      【解决方案2】:

      将要匹配的表达式包装在捕获组中,然后展开后视,然后使用 REGEXP_SUBSTR 的第 6 个参数提取捕获组的值:

      SELECT REGEXP_SUBSTR('1331@iwantthis@3ad44@2', '\d{4}\@(.\w+)', 1, 1, NULL, 1 )
      FROM   DUAL;
      

      哪些输出:

      | REGEXP_SUBSTR('1331@IWANTTHIS@3AD44@2','\D{4}\@(.\W+)',1,1,NULL,1) | | :------------------------------------------------- ---------------- | |我想要这个 |

      db小提琴here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 2014-09-10
        • 2021-05-22
        • 2017-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多