PowerShell正则:捕获VVVV与EN间带class=Pens的href值
解决PowerShell正则捕获特定href值的问题
问题分析
你需要从长字符串里先定位VVVV到EN的片段,再提取其中**紧跟class=Pens**的href="Value"里的Value。之前的正则没达到预期,核心问题在于:
- 用
Match方法只能获取单次匹配结果,没法捕获多个符合条件的条目 - 重复捕获组在.NET正则中只会保留最后一次捕获的内容,无法拿到所有目标值
可行解决方案
方案1:分步匹配(清晰易维护)
先提取VVVV到EN之间的核心片段,再在片段内精准匹配目标值:
# 提取VVVV到EN之间的内容 $middleSection = [regex]::Match($Content, '(?s)VVVV(.*?)EN').Groups[1].Value # 匹配所有带class=Pens的href值 $targetMatches = [regex]::Matches($middleSection, 'href=`"([^`"]*)`".*?class=Pens') # 提取所有结果 $finalResults = $targetMatches | ForEach-Object { $_.Groups[1].Value }
方案2:一步到位正则(简洁高效)
利用正向预查限定范围,直接匹配所有符合条件的条目:
$targetMatches = [regex]::Matches($Content, '(?s)(?<=VVVV.*?)href=`"([^`"]*)`".*?class=Pens(?=.*?EN)') $finalResults = $targetMatches | ForEach-Object { $_.Groups[1].Value }
效果验证
针对你给出的示例内容,两种方案都会返回XXXX1和XXXX2,完全符合预期。
内容的提问来源于stack exchange,提问作者POL
相关产品推荐
相关产品推荐

