2013-11-28 27 views
0

在使用正則表達式的Oracle PL/SQL代碼中,如何從一開始就以任何組合方式從特定字符中刪除所有出現的特定字符一串?usnig正則表達式,可以如何從字符串的開頭刪除某些字符的任意組合

例如,考慮字符 '+', ' - ', '=' 和 '' 在以下的輸入的開始時(空間):

' ++ -+= = - -= +ABCD EFG + XYD' 

則輸出必須是:

'ABCD EFG + XYD' 

我想到的解決辦法是這樣的:

1) set the starting point of the search at the beginning of the input (using ^) 
2) set the ending point of the search just before the first character which is not any of the 4 characters of interest. 
3) replace all spaces with empty character : REGEXP_REPLACE(' +', '') 
4) replace all + with empty character 
5) replace all - with empty character 
6) replace all = with empty character 

如果能在所有視爲一個合理的計劃,我STI我不知道上面的第2項可以用正則表達式編碼。

謝謝。

+1

爲什麼不使用一個簡單的LTRIM函數? – Noel

+0

我不知道LTRIM可以做同樣的事情(即修剪個別字符,不管它們出現的模式如何) - 感謝您提示Ramblin'Man – Majix

回答

2

正則表達式^[+\-= ]+應該爲你工作。
這應該匹配行首的1個或多個字符。如果沒有這些字符在行的開頭,那麼什麼都不會被替換。

你應該能夠使用它像這樣SELECT REGEXP_REPLACE(<field>, "^[+\-= ]+", "") FROM <table>;

+0

謝謝Aerox,修復了一些語法問題後,您的解決方案工作得相當好好。這是最終版本:REGEXP_REPLACE(input,'^ [+ - =] *','') – Majix

+0

謝謝,對於語法問題表示歉意,現在我已經使用了幾年了。 – AeroX

1

在11g中,你可以使用REGEXP_SUBSTR with subexpressions

SQL> SELECT regexp_substr(txt, '^([- +=]*)(.*)', 1, 1, '', '2') reg 
    2 FROM (SELECT ' ++ -+= = - -= +ABCD EFG + XYD' txt FROM dual); 
REG 
-------------- 
ABCD EFG + XYD 
+0

謝謝文森特,你的解決方案工作得非常好,但似乎我們也可以通過使用更簡單的regext_replace來獲得相同的結果,如AeroX答案的評論。 – Majix

相關問題