regexp:正则匹配
速查结论
regexp(str, regexp) 是 Spark SQL 中用于判断字符串是否匹配指定的正则表达式的函数。
语法
regexp(str, regexp)
如果 str 匹配 regexp,则返回真;否则返回假。
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| str | STRING | 要匹配的字符串表达式 |
| regexp | STRING | 正则表达式字符串(Java 正则表达式) |
从 Spark 2.0 开始,我们的 SQL 解析器不再对字符串文字(包括正则表达式模式)进行转义。例如,要匹配 "\abc",regexp 的正则表达式可以是 "^\abc$"。
有一个 SQL 配置 'spark.sql.parser.escapedStringLiterals',可以用来回退到 Spark 1.6 关于字符串文字解析的行为。例如,如果启用了此配置,可以匹配 "\abc" 的 regexp 是 "^\abc$"。
示例
> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals true
> SELECT regexp('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals false
> SELECT regexp('%SystemDrive%\\Users\\John', '%SystemDrive%\\\\Users.*');
true
提示:使用 LIKE 来匹配简单的字符串模式。
常见报错与避坑指南
- 正则表达式转义差异:Spark 2.0 起默认不对字符串文字进行转义,正则中的反斜杠需要按实际需要书写。如需匹配字面反斜杠
\,在 regexp 中需写\\(关闭 escapedStringLiterals 时需写\\\\)。 - 正则语法错误会直接报错:传入非法的正则表达式模式将导致运行时异常,而非返回 false。建议在开发阶段充分测试正则表达式。
- 简单匹配优先使用 LIKE:对于不需要正则特性的简单字符串模式匹配(如前缀、后缀、包含),
LIKE比regexp性能更好且可读性更强。
Since: 3.2.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
