regex返回空输出配置单元

iklwldmw  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(328)

我正在设计一个正则表达式来匹配以下三种结构之一:
伪代码:

number.number.number.number e.g. 102.100.1.1
number.number.number e.g. 1.2.4
number.number. e.g. 1.2

到目前为止,我使用的正则表达式如下所示:

\d{1,3}\\.\d{1,3}\\.\d{1,3}\\.\d{1,3}|\d{1,3}\\.\d{1,3}\\.\d{1,3}|\d{1,3}\\.\d{1,3}}

我正在运行以下查询来测试:

select 
    regexp_extract('172.1.1.1', '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|\d{1,3}\.\d{1,3}\.\d{1,3}|\d{1,3}\.\d{1,3}') 
from 
    dual

regex101建议这应该是可行的,regexr也是。
但是,结果是空白的。这里忽略了什么,为什么不起作用?

bfnvny8b

bfnvny8b1#

这可能是因为您使用“\.”而不是“.”。使用“\.”,它搜索以下模式:“.”而不是“.”。
试试这个:

\d{1,3}(\.\d{1,3}){1,3}

编辑:
您还应该考虑向regex添加分隔符。使用这个正则表达式,如果在“1234.5678”上运行,它将得到“234.567”。这很容易用以下方法解决:

(^|[^\d])(\d{1,3}(\.\d{1,3}){1,3})($|[^\d])

然后从输出中只得到第二组

相关问题