跳到主要内容

regexp_like:正则匹配判断

速查结论

regexp_like(str, regexp) 是 Spark SQL 中用于判断字符串是否匹配正则表达式的函数。

语法

regexp_like(str, regexp)

参数说明

参数类型说明
strSTRING需要判断的源字符串表达式
regexpSTRING表示正则表达式的字符串,应为 Java 正则表达式

从 Spark 2.0 开始,SQL 解析器不再对字符串文字(包括正则表达式模式)进行转义。例如,要匹配 \abc,regexp 的正则表达式可以是 ^\abc$

有一个 SQL 配置 spark.sql.parser.escapedStringLiterals,可以用来回退到 Spark 1.6 关于字符串文字解析的行为。

示例

> SET spark.sql.parser.escapedStringLiterals=true;
spark.sql.parser.escapedStringLiterals true
> SELECT regexp_like('%SystemDrive%\Users\John', '%SystemDrive%\\Users.*');
true
> SET spark.sql.parser.escapedStringLiterals=false;
spark.sql.parser.escapedStringLiterals false
> SELECT regexp_like('%SystemDrive%\\Users\\John', '%SystemDrive%\\\\Users.*');
true

常见报错与避坑指南

  • 转义模式的差异:当 spark.sql.parser.escapedStringLiterals=true 时,\\ 在字符串中表示一个反斜杠;当该配置为 false(默认)时,\\\\ 才表示一个反斜杠。转义错误会导致匹配失败,请先确认当前配置。
  • LIKE vs regexp_like:对于简单的字符串模式匹配,优先使用 LIKE 操作符,性能更好且语法更简洁。regexp_like 适合需要灵活正则表达式的场景。
  • NULL 处理:如果 str 或 regexp 任一参数为 NULL,函数返回 NULL(而非 true 或 false)。在 WHERE 子句中使用时需要注意 NULL 值的过滤逻辑。

Since: 3.2.0

📱关注公众号

「数据仓库技术」文章同步更新,不错过每一篇干货

微信公众号二维码
💬加群交流

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

交流微信二维码

你可能还想看