我試圖用空值替換兩個相互跟隨的點。正則表達式用空值替換兩個連續的點
SQL> select regexp_replace('..','[^\.]+\.','Null') from dual;
生產:
RE
--
..
,而我想:
RE
--
Null
如何實現這一目標使用正則表達式?
我試圖用空值替換兩個相互跟隨的點。正則表達式用空值替換兩個連續的點
SQL> select regexp_replace('..','[^\.]+\.','Null') from dual;
生產:
RE
--
..
,而我想:
RE
--
Null
如何實現這一目標使用正則表達式?
嘗試以下操作:
SELECT regexp_replace('..', '\.{2}', 'Null') FROM dual;
你的例子是使用了否定的^
符號(「不匹配.
」),這我不知道是你的意圖。如果您是不是想只在字符串的開始匹配..
,使用^
如下:
SELECT regexp_replace('..', '^\.{2}', 'Null') FROM dual;
這將看起來有點毛茸茸的,但對正則表達式參數:
(?!\.{3,})\.{2}(?<!\.{3,})
那將確保從前面或後面沒有任何更多或者不少於2 ..彼此跟隨。
所以它只會匹配..,而不是,等等,我假設這是你想要的。
赫克賈森是你砍死我的腦海裏沒有電腦上的宇宙可以讀我的心,給我一個答案 – 2012-07-19 04:47:36
如果你在一行的開頭找兩個點,也許這有可能工作
SELECT REGEXP_REPLACE('..', '^\.\.', 'Null') FROM DUAL
如果你在該行刪除找兩個點的任何位置的最簡單的表達表達式的開始處的^
。
如果您正在尋找兩個點其中包括整條生產線,在表達式的末尾添加$
,如
'^\.\.$'
的文檔Oracle支持正則表達式的元素可以發現here 。
分享和享受。
輝煌的不知道爲什麼我的工作並不奇怪,這不工作從雙重選擇regexp_replace('..','[^ \。{2}','Null'); – 2012-07-19 04:26:21
@ jhon.smith:^在正則表達式中有兩個不同用途:1)用於字符集內的否定(這是您如何使用它)和2)匹配字符串的開頭。 [^ \。] {2}指示Regex「匹配兩個連續的非DOT字符」,而^ [\。] {2}表示「匹配字符串開頭的兩個點」。 – SetFreeByTruth 2012-07-19 04:33:17
謝謝輝煌的解釋,以及爲什麼我的沒有工作:-) – 2012-07-19 04:44:51