Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 正则表达式用Null替换两个连续点_Sql_Regex_Oracle - Fatal编程技术网

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

Sql 正则表达式用Null替换两个连续点,sql,regex,oracle,Sql,Regex,Oracle,我试图用空值替换两个互相紧随的点 SQL> select regexp_replace('..','[^\.]+\.','Null') from dual; 产生: RE -- .. 鉴于我想要: RE -- Null 如何使用Regex实现这一点?请尝试以下操作: SELECT regexp_replace( '..', '\.{2}', 'Null' ) FROM dual; 您的示例是使用^符号进行否定(“不匹配”),我不确定您的意图。如果您只想在字符串开头匹配。,请按如下方

我试图用空值替换两个互相紧随的点

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

RE
--
..
鉴于我想要:

RE
--
Null
如何使用Regex实现这一点?

请尝试以下操作:

SELECT regexp_replace( '..', '\.{2}', 'Null' ) FROM dual;
您的示例是使用
^
符号进行否定(“不匹配
”),我不确定您的意图。如果您只想在字符串开头匹配
,请按如下方式使用
^

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

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

(?!\.{3,})\.{2}(?<!\.{3,})
(?!\.{3,})\.{2}(?)?
这将确保从前面或后面都不会有任何多于或少于2..的跟随


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

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

从DUAL中选择REGEXP\u REPLACE(“..”、“^\.\”、“Null”)


如果要查找行中的任意两点,请删除表达式开头的
^


如果要查找组成整行的两个点,请在表达式末尾添加
$
,如中所示

“^\.\.$”

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


分享和享受。

Brilliant不确定我的为什么不起作用,奇怪的是这也不起作用从dual;@jhon.smith:^中选择regexp_replace(“…”、“[^.]{2}'、“Null”);在正则表达式中有两种不同的用法:1)在字符集内求反(这就是您使用它的方式)和2)匹配字符串的开头。[^\.]{2}指示正则表达式“匹配两个连续的非点字符”,而^[\.]{2}则表示“在字符串开头匹配两个点”。谢谢你精彩的解释,以及为什么我的不起作用:-)见鬼,杰森,是的,你侵入了我的大脑宇宙中没有一台计算机能读懂我的大脑并给我答案