正则表达式返回空白输出 Hive

Regex returning blank output Hive

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

伪代码:

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 suggests this should work, as does RegExr.

然而,结果是空白。这里忽略了什么?为什么这不起作用?

这可能是因为您使用了“\\.”。代替 '\。'。使用“\\.”,它会搜索以下模式:“\.”而不是“.”。

试试这个:

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

编辑:

您还应该考虑在正则表达式中添加定界符。 使用此正则表达式,如果 运行 在“1234.5678”上,它将得到“234.567”。 这可以很容易地解决这个问题:

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

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