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

关于使用REGEXP_SUBSTR函数提取指定子串的正则表达式求助

关于使用REGEXP_SUBSTR函数提取指定子串的正则表达式求助

我来帮你搞定这两个REGEXP_SUBSTR的子串提取问题,针对你的两个场景分别调整正则表达式就能得到想要的结果啦:

场景1:提取“/”和“-”之间的字符串

你的需求是从字符串XXXXX-XXX#8#FF###TTTTTTT/SM123456789-JSMILEGGM 1.1####里提取/和-之间的SM123456789。

你原来用的正则[^/-]+$是匹配字符串末尾所有不是/和-的字符,这和需求不符。正确的思路是定位到/之后、-之前的内容,用捕获组来提取这部分:

SELECT REGEXP_SUBSTR('XXXXX-XXX#8#FF###TTTTTTT/SM123456789-JSMILEGGM 1.1####', '/(.*?)-', 1, 1, NULL, 1) new_str

简单解释:

  • /:精准匹配分隔符/
  • (.*?):非贪婪匹配任意字符(直到遇到第一个-就停止),括号标记这是我们要提取的目标内容(捕获组)
  • -:匹配结束的分隔符-
  • 最后一个参数1:指定返回第一个捕获组的内容,也就是我们要的中间字符串

执行后就能得到预期输出:SM123456789

场景2:提取第一个“/”之后的所有内容

你的需求是从字符串XXXXX-XXX#8#FF###TTTTTTT/SM123456789/JSMILEGGM 1.1####里提取第一个/之后的全部内容SM123456789/JSMILEGGM 1.1####。

你原来用的[^/]+是匹配第一个/之前的非/字符,完全搞反了方向。这里我们可以用正则匹配第一个/之后的所有内容,同样用捕获组提取:

SELECT REGEXP_SUBSTR('XXXXX-XXX#8#FF###TTTTTTT/SM123456789/JSMILEGGM 1.1####', '.*?/(.*)', 1, 1, NULL, 1) new_str

简单解释:

  • .*?/:非贪婪匹配第一个/之前的所有内容(包括/本身),相当于跳过前面不需要的部分
  • (.*):匹配/之后的所有内容,作为我们要的捕获组
  • 最后一个参数1:返回这个捕获组的内容,也就是第一个/之后的全部字符串

执行后就能得到预期输出:SM123456789/JSMILEGGM 1.1####

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:52:59