REGEXP_REPLACE用单个语句中的值列表替换值列表

时间:2014-11-08 12:33:46

标签: sql regex oracle replace

SELECT REGEXP_REPLACE('JUHETI BT MEMA', 'BT' ,'\BT',2) FROM dual;

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

如果单词BY出现在中间意味着它应该用/ BT替换,如果SYN出现意味着它应该用/ SYN替换。

如何在REGEXP中实现这一目标?

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

2 个答案:

答案 0 :(得分: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中包含反斜杠(),那么你必须   在它前面加上转义字符,也就是反斜杠。

子表达式是括在括号中的模式片段。 Subexpressions可以嵌套。 Subexpressions按其左括号出现的顺序编号 图案。例如,请考虑以下表达式:

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

此表达式按以下顺序有五个子表达式:"abcdefghi" 然后是"abcdef""abc""de""678"

答案 1 :(得分: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;