2014-11-08 110 views
0
SELECT REGEXP_REPLACE('JUHETI BT MEMA', 'BT' ,'\BT',2) FROM dual; 

这将替换BT前面的转义字符。但我有多个单词列表,如BT,SYS,PT等。现在我想用/ BT,/ SYS,/ PT替换所有的(BT,SYS,PT)。REGEXP_REPLACE用单个语句中的值列表替换值列表

如果word BY进入中间意味着它应该被替换为/ BT,如果SYN来的话意味着它应该被替换为/ SYN。

如何在REGEXP中实现此目标?

我想替换值列表值(BT,SYN,PT)的列表(/ BT,/ SYN,/ PT)

回答

0
SELECT REGEXP_REPLACE('JUHETI BT SYS PT MEMA', '((BT)|(SYS)|(PT))' ,'\\\1', 1) FROM dual; 

的replace_string可以包含多达500个反向引用到 子表达式的形式\ n,其中n是从1到9的数字。如果 想要在replace_string中包含反斜杠(),则必须在其前面加上转义字符(它也是反斜杠) 。

子表达式是用括号括起来的模式片段。子表达式可以嵌套。 子表达式按照其左括号出现在 模式中的顺序进行编号。例如,考虑以下表达式:

0123(((abc)(de)f)ghi)45(678) 

这个表达以下顺序的子表达式5:"abcdefghi"随后"abcdef",​​,"de""678"

+0

谢谢你解决了这个问题! – 2014-11-08 13:49:05

0

你想在选择的单词前面加正斜杠?

SELECT REGEXP_REPLACE ('JUHETI BT MEMA', 
         '(BT|PT|SYN)',  --all words enclosed in brackets to from 1st capture group 
         '/\1'    --forward slash, followed by string matched by 1st capture group 
        ) 
FROM DUAL; 
+0

谢谢你解决了这个问题! – 2014-11-08 13:45:08