我正在设计一个正则表达式来匹配以下三种结构之一:
伪代码:
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也是。
但是,结果是空白的。这里忽略了什么,为什么不起作用?
1条答案
按热度按时间bfnvny8b1#
这可能是因为您使用“\.”而不是“.”。使用“\.”,它搜索以下模式:“.”而不是“.”。
试试这个:
编辑:
您还应该考虑向regex添加分隔符。使用这个正则表达式,如果在“1234.5678”上运行,它将得到“234.567”。这很容易用以下方法解决:
然后从输出中只得到第二组