2016-04-21 142 views
0

我到這裏來檢查這個話題後: Regular Expression that includes plus sign and decimaloracle的電話號碼格式章EXP

我的主要問題是下面的,我錯了遷移,需要固定數據。 電話號碼,我們有一些字母和特殊字符,需要刪除。

想象例如這將是數據:

s#sdads+#09232342a 

我想只有+和數字 的+必須是可選的。

http://www.techonthenet.com/oracle/functions/regexp_substr.php https://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_regexp.htm

如果我讀了甲骨文,這應該是很容易的文件,但我不能讓它工作,我必須缺少基本的東西。 有什麼想法?

下面有什麼什麼,我已經嘗試了一些例子:

select regexp_substr('s#sdads+#09232342a','\+*[0-9]+') from dual; 

回報

09232342 

我期待它要考慮+ 我也試圖把在+的開始測試字符串沒有區別。 同爲改變正則表達式來

[\+]*[0-9]+ or [+]*[0-9]+ or (\+)*(\d)+ 

了。在結果沒有差異。

這讓我困惑的是,如果我改變測試字符串和正則表達式這個收益+,只加

select regexp_substr('+s#sdads+#09232342a','?[\+]*') from dual; 

,但如果我動+出開始消失

另外,如果我把這些數字在那裏,只有數字被認爲是:

select regexp_substr('+s#sdads+#09232342a','?[\+]*(\d)+') from dual; 

這也沒有工作:

select regexp_substr('+s#sdads+#09232342a','?[\+]{0,1}(\d)+') from dual; 
+0

它已經修復,謝謝大家 –

回答

1

你有+,並且您需要考慮的數字之間#字符:

查詢1 - 替換所有非所需字符

SELECT REGEXP_REPLACE('+s#sdads+#09232342a', '[^+0-9]') 
FROM DUAL 

輸出

++09232342 

查詢2 - 匹配整個字符串

SELECT REGEXP_REPLACE('+s#sdads+#09232342a', '^.*?(\+?)#(\d+).*$', '\1\2') 
FROM DUAL 

輸出

+09232342 

查詢3 - 匹配的子串

SELECT REGEXP_SUBSTR('+s#sdads+#09232342a', '\+?#\d+') 
FROM DUAL 

(你可以然後通過包裝th來替換無關的#在另一份聲明中替換)

輸出

+#09232342 
+0

感謝大家的反饋,這對我的作品也 –

1

的問題是,在所有的嘗試,你正在尋找+的數字立即執行。像這樣的東西應該工作:

select regexp_substr('+s#sdads+#09232342a', '\+') || 
     regexp_substr('+s#sdads+#09232342a', '\d+') from dual; 
+0

謝謝大家的反饋,這對我的作品。 –