如何使用正则表达式提取第二个匹配项后的字符串?
解决正则匹配第二个"website-prod-"后的内容问题
你的问题出在当前正则用了贪婪匹配的.*,它会从第一个website-prod-开始,一直匹配到最后一个-backend前的所有内容。要精准提取目标部分,有两种简单可行的方案:
方案1:精准定位目标路径段
利用URL结构中目标内容在backendServices/之后的特点,给正向预查加上前缀限定,直接锁定第二个website-prod-:
(?<=backendServices/website-prod-).*(?=-backend)
这个正则会先匹配backendServices/website-prod-作为前置条件,确保只提取backendServices路径段后的目标内容,完全避开前面projects里的第一个website-prod-。
方案2:限制匹配范围不跨路径分隔符
因为目标内容所在的路径段没有/,可以用[^/]*代替.*,匹配除/之外的所有字符,避免跨越到前面的路径段:
(?<=website-prod-)[^/]*(?=-backend)
[^/]*是精准的非贪婪匹配,只会匹配当前路径段内website-prod-到-backend之间的内容,不会涉及前面的website-prod-1234部分。
测试这两个正则,都能从你的示例URL中提取出预期结果:
num-1111 re-3724 test
内容的提问来源于stack exchange,提问作者captain_booboo
相关产品推荐
相关产品推荐

