2012-07-19 56 views

回答

3

尝试以下操作:

SELECT regexp_replace('..', '\.{2}', 'Null') FROM dual; 

你的例子是使用了否定的^符号(“不匹配.”),这我不知道是你的意图。如果您是不是想只在字符串的开始匹配..,使用^如下:

SELECT regexp_replace('..', '^\.{2}', 'Null') FROM dual; 
+0

辉煌的不知道为什么我的工作并不奇怪,这不工作从双重选择regexp_replace('..','[^ \。{2}','Null'); – 2012-07-19 04:26:21

+0

@ jhon.smith:^在正则表达式中有两个不同用途:1)用于字符集内的否定(这是您如何使用它)和2)匹配字符串的开头。 [^ \。] {2}指示Regex“匹配两个连续的非DOT字符”,而^ [\。] {2}表示“匹配字符串开头的两个点”。 – SetFreeByTruth 2012-07-19 04:33:17

+0

谢谢辉煌的解释,以及为什么我的没有工作:-) – 2012-07-19 04:44:51

0

这将看起来有点毛茸茸的,但对正则表达式参数:

(?!\.{3,})\.{2}(?<!\.{3,}) 

那将确保从前面或后面没有任何更多或者不少于2 ..彼此跟随。

所以它只会匹配..,而不是,等等,我假设这是你想要的。

+0

赫克贾森是你砍死我的脑海里没有电脑上的宇宙可以读我的心,给我一个答案 – 2012-07-19 04:47:36

0

如果你在一行的开头找两个点,也许这有可能工作

SELECT REGEXP_REPLACE('..', '^\.\.', 'Null') FROM DUAL

如果你在该行删除找两个点的任何位置的最简单的表达表达式的开始处的^

如果您正在寻找两个点其中包括整条生产线,在表达式的末尾添加$,如

'^\.\.$'

的文档Oracle支持正则表达式的元素可以发现here

分享和享受。