正则表达式用Null替换两个连续的点

时间:2012-07-19 04:14:30

标签: sql regex oracle

我试图用Null替换两个点。

SQL> select regexp_replace('..','[^\.]+\.','Null') from dual;

产生

RE
--
..

而我想:

RE
--
Null

如何使用Regex实现此目的?

3 个答案:

答案 0 :(得分:3)

尝试以下方法:

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

您的示例使用^符号进行否定(“不匹配.”),我不确定您的意图。如果您只想在字符串的开头匹配..,请按以下方式使用^

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

答案 1 :(得分:0)

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

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

这将确保从前面或后面彼此之后不再有任何或少于2 ..

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

答案 2 :(得分:0)

如果你在一行的开头寻找两个点,也许最简单的表达可能是有效的

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

如果您要在该行的任何位置查找两个点,请删除表达式开头的^

如果您正在寻找构成整行的两个点,请在表达式的末尾添加$,如

'^\.\.$'

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

分享并享受。