【问题标题】:Oracle regexp_substr - how extract text excluding marker charactersOracle regexp_substr - 如何提取不包括标记字符的文本
【发布时间】:2012-01-11 16:47:44
【问题描述】:

我有一个采用这种格式的字符串

Transaction 'pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)' failed due to connection error

我需要提取 ' 和 (.

在此示例中为 pqr_111_xyz_222。

以下查询返回'pqr_111_xyz_222(

select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '''.+\(') from dual;

如何修改正则表达式(或使用可以包含在此单个查询中的任何其他技术)以便排除标记 ' 和 ( 而我只得到 pqr_111_xyz_222

【问题讨论】:

    标签: sql regex oracle


    【解决方案1】:

    您可以改用REGEXP_REPLACE

    regexp_replace('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '.*''(.+)\(.*', '\1')
    

    【讨论】:

    • +1。使用 oracle 没有任何直接的方法可以做到这一点。
    【解决方案2】:
    select regexp_substr('Transaction ''pqr_111_xyz_222(Aaaa Bbbb Cccc - 3333)'' failed due to connection error', '\w+',1,2) from dual;
    

    【讨论】:

    • 聪明的解决方案。 regexp_substr 在这里用于不知名的情况。
    【解决方案3】:

    您可以用 substr 和 instr 包围函数调用以删除结果的第一个和最后一个字符。缺点是我认为您必须额外调用 regexp_substr 才能获得传递给 substr/instr 的结果长度。

    【讨论】:

      【解决方案4】:

      如果您想深入研究使用反向引用(regexp_replace 选项中需要)http://www.amazon.com/Regular-Expressions-Reference-OReilly-ebook/dp/B0026OR38A/ref=sr_1_4?ie=UTF8&qid=1323109619&sr=8-4

      ,这本书是一个不错的来源

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-26
        • 2021-12-18
        • 2014-08-18
        • 2021-04-23
        • 2021-08-04
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        相关资源
        最近更新 更多