正则表达式匹配或分支后完整字符串却仅捕获末尾字符的原因是什么
问题原因
该问题是正则的重复捕获分组覆盖规则导致的:
- 绝大多数正则引擎中,当捕获分组后直接加量词时,分组会被多次重复匹配,最终仅保留最后一次匹配的内容作为该分组的捕获值。你写的
(.)*将量词*放在了捕获分组(.)的外侧,分组每次仅匹配1个字符,每匹配到新字符就会覆盖上一次的捕获结果,最终自然只会保留../和.css之间的最后一个字符。 - 如果要完整捕获两部分中间的所有内容,需要将量词放到捕获分组内部,调整为
(.*)或者精准匹配双引号内容的([^"]*)即可,示例正则可修改为:f="(\.\.\/|)(.*)\.css,此时第二个分组就能完整捕获到nicepage这类文件名内容。
内容的提问来源于stack exchange,提问作者Yes
相关产品推荐
相关产品推荐

