Oracle中的正则表达式用法

时间:2012-07-23 10:35:35

标签: regex oracle

这里我想从数据库列复制一些子字符串并将其附加到列的末尾。

E.g。

列中的数据如下所示:

 string data -id pattern -xyz test some data 

这应该像这样替换

 string data -id pattern -xyz test some data -c test.pattern.pl

您可以看到我想在-id之后和-xyz之前复制字符串,并在测试结束时将其追加到pl

如果某列是

string data -id john -xyz test some data

然后替换的值应为

string data -id john -xyz test some data -c test.john.pl

我尝试使用REGEXP_REPLACE / REGEXP_SUBSTR但无法解决此问题。

2 个答案:

答案 0 :(得分:0)

在11g中,您可以使用regexp_substr直接获取模式:

select txt, regexp_substr(txt, '-id ([^ ]*)', 1, 1, '', '1')
  from (select 'string data -id john -xyz test some data' txt from dual)

TXT                                        REG
string data -id john -xyz test some data   john

在11g之前,您可以使用regexp_substrsubstr的组合:

select txt, 
       substr(regexp_substr(txt, '-id [^ ]*'), 4) sub
  from (select 'string data -id john -xyz test some data' txt from dual)

答案 1 :(得分:0)

试试这个:

select p,
       p || regexp_replace(p, '(.*-id )(.*)( -xyz.*)', ' -c test.\2.pl') np
  from t

t是您的表格,p是列名称)

Here是一个小提琴