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

如何编写正则表达式匹配多个变量序列并保留所有剩余字符?

如何用正则表达式匹配多个变量实例并包含所有剩余字符?

目标字符串:

"things/groups/%S<match_00>/colors/%S<match_01>/details"

你之前尝试的几种模式存在的问题:

  • 模式 (.*?)(%S<)(.*?)(>)(.*?):能匹配到match_00和match_01,但遗漏了末尾的/details
  • 模式 (.*?)(%S<)(.*?)(>)(.*):包含了整个字符串,但只能捕获第一个变量match_00
  • 模式 (.*?)(%S<)(.*)(>)(.*):包含整个字符串,但把match_00到match_01之间的所有内容合并成一个分组,无法分别获取两个变量
  • 模式 (.*)(%S<)(.*)(>)(.*):包含整个字符串,但只能捕获第二个变量match_01

解决方案

如果你的需求是同时保留整个字符串内容,并且提取所有%S<>包裹的变量,可以分两种场景处理:

1. 提取所有变量 + 保留原字符串

直接保留原字符串以获取完整内容,再用带全局修饰符g的正则提取所有变量:

  • 提取变量的正则:%S<(.*?)>
    这个正则会匹配每一个%S<>包裹的内容,捕获组中就是你需要的match_00、match_01这类变量。

2. 单个正则捕获整个字符串和所有变量(适用于固定数量变量的场景)

如果变量数量固定(比如这里是2个),可以用以下正则一次性捕获整个字符串和每个变量:

^(.*?)(%S<(.*?)>)(.*?)(%S<(.*?)>)(.*)$
  • 分组1:things/groups/(第一个变量前的内容)
  • 分组3:match_00(第一个变量)
  • 分组5:match_01(第二个变量)
  • 分组6:/details(最后一个变量后的内容)
  • 将所有分组拼接即可得到完整的原字符串。

如果变量数量不固定,建议用第一种方法:先保留原字符串,再用全局匹配提取所有变量,这种方式更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:15:51