Hive Regex表现得很贪婪



我只想将字符串中的9111911与任何数量的前序或后序*#进行匹配。

我的Regex:

[^0-9]*[1-9]{3,4}[^0-9]*

下面的测试代码在我预期为false时返回true:

select Digits
from (select '*11911#' as Digits) A
where Digits rlike '[^0-9]*[1-9]{3,4}[^0-9]*'

我做错了什么?

BTW在单元中转义时,应使用双反斜杠:\*[*],以避免不可预测的行为(有时单反斜杠用作转义,有时不用作,双反斜杠在单元中始终用作转义(。

'[^0-9]\*[1-9]{3,4}[^0-9]*'-不匹配,*正确转义,并且字符串中在*之前没有任何内容。

让我们删除\*之前的[^0-9],然后再次检查:

这不返回任何行:

select Digits
from (select '*11911#' as Digits) A
where Digits rlike '\*[1-9]{3,4}[^0-9]'

此外,此'\*[1-9]{3,4}[^0-9]+'与不匹配

这个匹配:

'\*[1-9]{3,4}[^0-9]*' 

因为末尾的*表示0次或更多次,所以它完全匹配:一行中有4[1-9]和零个非数字。

在regex101上,它的工作原理相同:last*使其匹配

最新更新