关于完整单词的Oracle regexp_replace

时间:2017-06-14 19:17:55

标签: sql regex oracle11g

我想用" OF"替换单词OF的实例。我只希望这能用于完整的单词。所以不是L_OF,DOF,OFZ,DOFD,OF_L等。

除最终字符串外,我的代码在下面工作。

它返回:

("OF"*OF + 2) 

...而不是:

("OF"*"OF" + 2) 

我怎样才能让它在那个上面工作?

with stg as
(
select '(ofof+ol)' str from dual union all
select '(oof+ol+of)'   from dual union all
select '(*of + 2)'     from dual union all
select '(of*of + 2)'   from dual 
)
select str,
       regexp_replace(upper(str), '(\W|^)(OF)(\W|$)', '\1"OF"\3') as str2
from   stg

2 个答案:

答案 0 :(得分:3)

这是一种方法 - 使用递归查询(需要Oracle 11.2或更高版本)。不要指望它快。

{{1}}

答案 1 :(得分:0)

评论太长了。我不知道解决方案,但我确实理解了这个问题。使用$eng = array('A', 'B','C'); //etc... $hin = array('अ','ब','क'); //etc... $result = str_replace($eng, $hin, $mystring); 可以更轻松地看到它,但'of of'则不会。

问题是定义第一个单词的字符不用于定义第二个单词。正则表达式似乎需要一个特殊的字符,如" ^"表示"前一场比赛后的第一个角色"。我不知道是否存在。