如何用正则表达式匹配第n次与第n+1次出现项之间的内容?
提取指定斜杠区间内容的正则方案
给定字符串:
aBcD-19/WES/VA-MKL-2217223/2020
需要提取第2个/和第3个/之间的内容VA-MKL-2217223,这里提供两种精准匹配的正则方案:
方案一:捕获组匹配
使用带捕获组的正则直接锁定目标区间:
^[^/]+/[^/]+/([^/]+)/
- 逻辑说明:
^[^/]+匹配从字符串开头到第一个/的所有非/字符/[^/]+/匹配第一个/到第二个/之间的内容及前后的/([^/]+)捕获第2个/之后、第3个/之前的所有非/字符(即目标内容)- 最后一个
/匹配第3个/用于定位边界 - 提取结果时取捕获组1的内容即可
方案二:正向后顾断言匹配
用后顾断言定位目标区间的起始位置,直接匹配目标内容:
(?<=/[^/]+/)[^/]+
- 逻辑说明:
(?<=/[^/]+/)是正向后顾断言,确保当前位置前面是「一个/+ 任意非/字符 + 一个/」,也就是刚好在第2个/之后的位置[^/]+匹配所有非/字符,直到遇到第3个/停止,直接得到目标内容
关于原正则的问题
你之前写的'\S+?/'会匹配任意非空白字符到第一个/,所以会得到aBcD-19/、WES/、VA-MKL-2217223/三个匹配项,没有精准锁定第2和第3个/的区间,因此无法直接得到目标内容。
内容的提问来源于stack exchange,提问作者Sarah cartenz
相关产品推荐
相关产品推荐

