PowerShell中正则表达式提取URL:解决URL连写匹配问题
解决PowerShell中连写URL的正则提取问题
直接给你能用的修正版正则:
\b(https?://)(?:(?!https?:\/\/)[\w-./?%&=])+\b如果要贴合你原来的正则结构调整,也可以用这个:
(https?)://([\w-]+\.)+[\w-]+(?:/(?!https?:\/\/)[\w- ./?%&=])*问题根源:
你原来的正则里,路径部分的匹配规则(比如/[\w- ./?%&=]*)没有限制不能碰到下一个URL的开头,所以会把后面https的部分也包含进去,导致第二个URL无法被识别。核心解决逻辑:
把**负向预查(?!https?:\/\/)**加到路径部分的字符匹配前面,确保每匹配一个字符时,后面都不会紧跟着新的http://或https://。这样正则就会在遇到下一个URL开头时立刻停止匹配,不会“越界”。PowerShell实际使用示例:
假设你要从文件里提取URL,用这段代码就行:# 读取文件内容 $fileContent = Get-Content -Path "你的文件路径.txt" -Raw # 提取所有符合规则的URL $extractedUrls = [regex]::Matches($fileContent, '\b(https?://)(?:(?!https?:\/\/)[\w-./?%&=])+\b') | ForEach-Object { $_.Value } # 输出结果 $extractedUrls
内容的提问来源于stack exchange,提问作者Secure Aviator
相关产品推荐
相关产品推荐

