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)
答案 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;