2014-11-08 85 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