如何使用正则提取URL斜杠间及/products/后到斜杠或句点的文本
正则调整方案:提取
/products/后、/或.前的路径片段 需求说明
需要从URL路径中提取固定规则片段:
- 匹配起点:字符串中
/products/的结束位置 - 匹配终点:起点后第一次出现正斜杠
/或者 句点.的位置 - 测试样例与预期结果:
- 样例1:
www.site.com/products/pants.html→ 提取结果pants - 样例2:
www.site.com/products/shoes/sneakers.html→ 提取结果shoes
- 样例1:
原有正则问题
你之前写的正则(?<=/products/).*($.|/)存在3个明显错误:
- 边界符写法错误:
$.为无效逻辑,既不能匹配句点,还会错误匹配行尾位置 - 匹配模式错误:
.*为贪婪匹配,会尽可能向后匹配最长字符串,不会在第一个边界处停止 - 结果包含多余内容:终止边界
/会被纳入匹配结果,无法直接拿到目标文本
可用正则方案
直接使用字符集取反的写法即可,匹配效率最高,无需额外捕获组:
(?<=/products/)[^/.]+
逻辑拆解
(?<=/products/):正向回顾断言,仅定位/products/之后的位置作为匹配起点,该段内容不会进入最终匹配结果[^/.]+:匹配1个及以上连续字符,这些字符不能是/也不能是.,遇到第一个/或.就自动终止匹配,刚好符合边界要求,不会把终止符纳入结果。
如果习惯用断言写终止边界,也可以用非贪婪匹配的写法,效果一致但性能稍差:
(?<=/products/).*?(?=[/.])
匹配验证
两个测试样例均能准确拿到目标结果:
- 对
www.site.com/products/pants.html,匹配到/products/后连续读取非/非.字符,到.html前的句点处停止,返回pants - 对
www.site.com/products/shoes/sneakers.html,匹配到/products/后连续读取非/非.字符,到后续第一个路径斜杠处停止,返回shoes
内容的提问来源于stack exchange,提问作者Gym Rat
相关产品推荐
相关产品推荐

