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

Golang正则使用|分隔匹配串时仅最后一个子串匹配失败问题咨询

问题根因

正则表达式中|选择符的优先级最低,你没有给数字列表加分组限制,所以原始正则实际被拆分为3个独立的匹配分支,和你预期的「test/[任意数字]/test/xxx/四位年份/」格式完全不符:

  • 分支1:^test\/053783914460,仅匹配开头为test/053783914460的字符串
  • 分支2:182782814227,只要字符串任意位置出现这串数字就匹配成功
  • 分支3:161046048738\/test\/\S+\/\d{4}\/,仅匹配数字161046048738后面直接跟/test/xxx/四位年份/的内容,缺少了前缀test/的匹配逻辑

这就是为什么前两个数字对应的测试用例能匹配成功,第三个数字的用例匹配失败的核心原因。

修复方案

用非捕获分组把数字列表包起来,限制|的作用范围仅在数字选择项内部,修正后的正则如下:

^test\/(?:053783914460|182782814227|161046048738)\/test\/\S+\/\d{4}\/

其中(?:)是非捕获分组,仅用来限制运算符范围,不会额外生成捕获分组占用内存,性能更优。

验证效果

修正后所有符合预期格式的字符串都能正常匹配:

  • test/053783914460/test/random/2021/ 匹配成功
  • test/182782814227/test/random/2021/ 匹配成功
  • test/161046048738/test/random/2021/ 匹配成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:54:07