我试图用Null替换两个点。
SQL> select regexp_replace('..','[^\.]+\.','Null') from dual;
产生
RE
--
..
而我想:
RE
--
Null
如何使用Regex实现此目的?
答案 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。
分享并享受。