我想判断一个正数字符串是否以“.0”结尾,所以我编写了以下sql: select '12310' REGEXP '^[0-9]*\.0$' . 结果是 true 然而。我想知道为什么会有这样的结果,因为我用“\”before“.”来逃避。所以我写了另一个 select '1231.0' REGEXP '^[0-9]\d*\.0$' ,但这次的结果是 false . 谁能告诉我正确的模式吗?
select '12310' REGEXP '^[0-9]*\.0$'
true
select '1231.0' REGEXP '^[0-9]\d*\.0$'
false
vwhgwdsa1#
regexp中的点(.)有特殊的含义(任何字符),如果您想从字面上理解点,则需要转义:
select '12310' REGEXP '^[0-9]*\\.0$';
结果:
使用双斜杠对配置单元中的特殊字符进行转义。斜杠有特殊的含义,用于像\073(分号)、\n(换行符)、\t(制表符)等字符。这就是为什么转义时需要使用双斜杠。也用于字符类数字使用 \\d :
\\d
hive> select '12310.0' REGEXP '^\\d*?\\.0$'; OK true
此外,方括号内的字符不需要双斜杠转义: [.] 可以用来代替 \\.
[.]
\\.
wyyhbhjk2#
如果您知道它是一个数字字符串,为什么不直接使用:
select ( val like '%.0' )
如果要验证字符串在其他地方是否有数字,则需要正则表达式。但如果你只需要检查最后两个字符, like 足够了。至于你的问题 . 是正则表达式中的通配符。它匹配任何字符。
like
.
2条答案
按热度按时间vwhgwdsa1#
regexp中的点(.)有特殊的含义(任何字符),如果您想从字面上理解点,则需要转义:
结果:
使用双斜杠对配置单元中的特殊字符进行转义。斜杠有特殊的含义,用于像\073(分号)、\n(换行符)、\t(制表符)等字符。这就是为什么转义时需要使用双斜杠。也用于字符类数字使用
\\d
:此外,方括号内的字符不需要双斜杠转义:
[.]
可以用来代替\\.
wyyhbhjk2#
如果您知道它是一个数字字符串,为什么不直接使用:
如果要验证字符串在其他地方是否有数字,则需要正则表达式。但如果你只需要检查最后两个字符,
like
足够了。至于你的问题
.
是正则表达式中的通配符。它匹配任何字符。