You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL中使用POSIX正则匹配非数值行的语法疑问

Spark SQL中使用POSIX类正则的正确写法

Spark SQL的rlike函数基于Java正则表达式引擎,不支持[:digit:]/[:alpha:]这类POSIX括号表达式语法,这也是你测试写法无效的原因。要实现对应功能,需要使用Java正则的Unicode属性类写法:

替代方案

1. 查找非数值行(替代[^0-9])

可以用[^\\p{Digit}],或者更简洁的\\D(匹配任意非数字字符):

// 写法1:使用Unicode属性类
spark.sql("select * from tabl where UPC rlike '[^\\p{Digit}]'").show()

// 写法2:用\D简化
spark.sql("select * from tabl where UPC rlike '\\D'").show()

2. 匹配纯数字字符串(对应你的测试语句)

用^\\p{Digit}+$或者^\\d+$(\d是\p{Digit}的简写):

spark-sql> select * from ( select '8787687' col1) where rlike(col1,'^\\p{Digit}+$');
-- 或者
spark-sql> select * from ( select '8787687' col1) where rlike(col1,'^\\d+$');

常用等价映射

POSIX类Java正则等价写法说明
[:digit:]\\p{Digit}/\\d匹配0-9的阿拉伯数字
[:alpha:]\\p{Alpha}匹配任意字母(含大小写)
[:alnum:]\\p{Alnum}匹配字母和数字

内容的提问来源于stack exchange,提问作者Prabu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:00:59