我正在尝试用 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;
这看起来有点毛茸茸,但对于 regex 参数:
(?!\.{3,})\.{2}(?<!\.{3,})
这将确保没有更多或少于 2 .. 从前面或后面相互跟随。
所以它只会匹配 ..,而不是 ...,不是 .,等等。我假设这就是你想要的。
如果您要在一行的开头寻找两个点,那么可能最简单的表达式可能是
SELECT REGEXP_REPLACE('..', '^\.\.', 'Null') FROM DUAL
如果您要在该行的任意位置查找两个点,请删除^
表达式开头的 。
如果您正在寻找构成整行的两个点,请$
在表达式的末尾添加,如
'^\.\.$'
可以在此处找到 Oracle 支持的正则表达式元素的文档。
分享和享受。