跳到主要内容

regexp_instr:正则位置查找

速查结论

regexp_instr(str, regexp) 是 Spark SQL 中用于在字符串中搜索正则表达式并返回匹配子字符串起始位置的函数。

语法

regexp_instr(str, regexp)

参数说明

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

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

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

示例

> SELECT regexp_instr('user@spark.apache.org', '@[^.]*');
5

常见报错与避坑指南

  • 位置从 1 开始计数regexp_instr 返回的位置是基于 1 的(而非 0)。例如,字符串第一个字符匹配时返回 1。这与许多编程语言中 0-based 的索引习惯不同,请务必注意。
  • 无匹配返回 0:当正则表达式在字符串中未找到匹配时,函数返回 0(而非 NULL 或 -1)。在对返回值做后续计算时要考虑这种情况。
  • 正则性能问题:如果正则表达式包含大量回溯(如 .* 嵌套),在大文本上可能导致性能严重下降。建议使用精确的正则模式。

Since: 3.4.0

📱关注公众号

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

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

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

交流微信二维码

你可能还想看