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

带负向前瞻的正则表达式匹配范围超预期,求解决方法

解决正则匹配不带UUID的路径问题

测试案例

/templates/blue-business-bi-fold-brochure-4eef5269-0957-4f14-ad6c-1343a2fe75a3
/templates/flyers/4eef5269-0957-4f14-ad6c-1343a2fe75a3
/templates/brochures/theatre-playbill-program
/templates/infographics/diversity-and-inclusion-terminology-infographic-dbc47165-dee4-478f-a0b9-313a54a5338a

目标

仅匹配第三个路径:/templates/brochures/theatre-playbill-program,即排除最后一段为UUID(8-4-4-4-12格式十六进制字符串)的路径。

问题根源

你提到的贪婪匹配问题,是因为原正则中使用.*(贪婪匹配任意字符),无法区分普通路径结尾和UUID结尾的情况,导致不符合要求的路径也被匹配。

解决方案

用[^/]+替代.*避免跨/的贪婪匹配,同时通过负向先行断言排除UUID格式的结尾,最终正则如下:

^/templates/[^/]+/(?!([0-9a-f]{8}-){3}[0-9a-f]{4}-[0-9a-f]{12}$)[^/]+$

正则细节解释

  • ^/templates/:匹配路径开头的固定前缀
  • [^/]+/:匹配模板类型(如brochures、flyers),[^/]+确保只匹配/分隔的单一段落,不会跨段贪婪匹配
  • (?!...):负向先行断言,确保后续内容不是UUID格式
  • ([0-9a-f]{8}-){3}[0-9a-f]{4}-[0-9a-f]{12}$:精准匹配UUID结构,$确保UUID在路径结尾
  • [^/]+$:匹配最后一段路径内容,直到字符串结尾

简化方案(仅匹配指定路径)

如果只需要精准匹配第三个目标路径,可直接使用:

^/templates/brochures/theatre-playbill-program$

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:47