【问题标题】:Oracle regexp_substr, regexp_replaceOracle regexp_substr、regexp_replace
【发布时间】:2014-05-28 05:37:30
【问题描述】:

我需要通过 oracles regexp_substr 方法提取子字符串。

到目前为止我使用

select regexp_substr('TD_SCHEMANEU_576','[^TD_]+[a-zA-Z]') from dual
;

效果很好,因为它返回 'TD_' && '_576' 之间的预期子字符串:

SCHEMANEU

但如果源字符串不包含字符串 'TD_' 正则表达式返回任何字符串而不是 null

以下返回 abc 而不是 null

select regexp_substr('abc_def_ghi1024','[^TD_]+[a-zA-Z]') from dual
;

【问题讨论】:

    标签: regex oracle oracle10g


    【解决方案1】:

    [^TD_] 表示“任何字符,TD_ 除外”。

    您可能想要使用REGEX_REPLACE 和捕获组:

    REGEX_REPLACE('TD_SCHEMANEU_576',
                  'TD_([a-zA-Z]+)',
                  '\1')
    

    \1 是一个反向引用,指向第一个捕获组中的内容,即正则表达式中的第一组括号。

    【讨论】:

    • Oracle10g 是否支持捕获组?我收到一个错误:Error at line ... Command: '\1')
    • 我无法测试自己,但是it seems like it should...
    • @My-Name-Is:我认为您使用的是 regex_replace 而不是 regex_substr,对吧?
    猜你喜欢
    • 2018-12-18
    • 2016-05-22
    • 2021-12-26
    • 1970-01-01
    • 2018-09-20
    • 2018-10-07
    • 2018-04-23
    • 2019-10-20
    • 1970-01-01
    相关资源
    最近更新 更多