2014-04-14 38 views
0

我需要通过神谕regexp_substr方法提取一个子字符串。Oracle regexp_substr,regexp_replace

到目前为止我用

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 
; 

回答

0

[^TD_]意味着 “任何字符,除了T,一个D_”。

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

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

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

+0

Oracle10g支持捕获组吗?我收到一个错误: '错误在...命令:'\ 1')' –

+0

我无法测试自己,但[看起来应该](http://docs.oracle.com/ cd/B19306_01/server.102/b14200/functions130.htm#SQLRF06302)... – Robin

+0

@我的名字是:我认为你使用'regex_replace'而不是'regex_substr',对吧? – Robin