正则表达式返回空白输出 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])
然后只从输出中得到第二组
我正在设计一个正则表达式来匹配以下三种结构之一:
伪代码:
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])
然后只从输出中得到第二组