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

Oracle中使用REGEXP_SUBSTR无法匹配正则模式的第二次出现

问题分析与解决方案

我来帮你拆解下问题根源,以及怎么调整才能拿到你想要的结果:

原正则的核心问题

你用的正则是 \d+,\d+[^,]+,,咱们把它拆碎了看:

  • \d+:匹配1个或多个数字
  • ,:严格匹配一个逗号,这里要求逗号后面必须直接跟数字
  • \d+:再匹配1个或多个数字
  • [^,]+:匹配1个或多个非逗号字符
  • ,:匹配结尾的逗号

而你期望的第二次匹配项是 123, 768Redwood Shores,,这个片段里逗号后面是空格,不是直接跟数字,完全不符合原正则里 \d+,\d+ 的规则——这就是为啥找不到它的关键原因!

第一次匹配的内容解释

再看你的原字符串:500 ,Oracle 1234,123Parkway123aa 123, 768Redwood Shores, CA,
第一个符合原正则的片段是 1234,123Parkway123aa 123,:

  • 1234 匹配 \d+,后面紧跟逗号
  • 123 匹配 \d+
  • Parkway123aa 123 匹配 [^,]+
  • 最后以逗号结尾,完美契合原正则,所以这是第一次匹配的结果。

修正后的解决方案

要匹配到你想要的 123, 768Redwood Shores,,只需要修改正则,允许逗号后面出现可选的空白字符,再跟数字就行。把正则改成 \d+,\s*\d+[^,]+,:

  • \s*:匹配0个或多个空白字符(包括空格、制表符等),兼容了逗号后有空格的场景。

修正后的SQL语句如下:

SELECT REGEXP_SUBSTR('500 ,Oracle 1234,123Parkway123aa 123, 768Redwood Shores, CA,', '\d+,\s*\d+[^,]+,',1,2) "REGEXPR_SUBSTR" FROM DUAL;

执行这条语句后,就能得到你期望的第二次匹配结果 123, 768Redwood Shores, 啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:34:18