Oracle regexp_substr,regexp_replace

时间:2014-04-14 09:54:04

标签: regex oracle oracle10g

我需要通过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
;

1 个答案:

答案 0 :(得分:0)

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

您可能希望使用REGEX_REPLACE并捕获群组:

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

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