1

我正在尝试用 Null 替换两个相互跟随的点。

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

产生:

RE
--
..

而我想要:

RE
--
Null

如何使用正则表达式实现这一目标?

4

3 回答 3

3

尝试以下操作:

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

您的示例使用^否定符号(“不匹配.”),我不确定这是您的意图。如果您只想匹配..字符串的开头,请使用^如下:

SELECT regexp_replace( '..', '^\.{2}', 'Null' ) FROM dual;
于 2012-07-19T04:21:10.763 回答
0

这看起来有点毛茸茸,但对于 regex 参数:

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

这将确保没有更多或少于 2 .. 从前面或后面相互跟随。

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

于 2012-07-19T04:27:31.990 回答
0

如果您要在一行的开头寻找两个点,那么可能最简单的表达式可能是

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

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

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

'^\.\.$'

可以在此处找到 Oracle 支持的正则表达式元素的文档。

分享和享受。

于 2012-07-20T11:09:00.793 回答