我想判断一个正数字符串是否以".0“结尾,所以我写了下面的sql:select '12310' REGEXP '^[0-9]*\.0$'。然而,结果是true。我想知道为什么我会得到这个结果,因为我之前用了"\“。为了逃脱。所以我写了另一个select '1231.0' REGEXP '^[0-9]\d*\.0$',但这次的结果是false。有人能告诉我正确的模式吗?
发布于 2019-11-27 21:53:30
点(.)在regexp中有特殊的含义(任何字符),如果您想要字面上的点,则需要转义:
select '12310' REGEXP '^[0-9]*\\.0$';结果:
false使用双斜杠转义配置单元中的特殊字符。斜杠有特殊的含义,用于\073 (分号)、\n (换行符)、\t (制表符)等字符。这就是为什么要转义时需要使用双斜杠。对于字符类数字,也使用\\d
hive> select '12310.0' REGEXP '^\\d*?\\.0$';
OK
true此外,方括号内的字符不需要双斜杠转义:可以使用[.]代替\\.
发布于 2019-11-27 21:26:10
如果你知道它是一个数字字符串,为什么不直接使用:
select ( val like '%.0' )如果你想验证字符串是否在其他地方都有数字,你需要正则表达式。但是,如果只需要检查最后两个字符,like就足够了。
至于你的问题,.是正则表达式中的通配符。它可以匹配任何字符。
https://stackoverflow.com/questions/59071214
复制相似问题