正则表达式从ASPX文件PowerShell读取URL



我正在编写一个PowerShell脚本,该脚本从ASPX文件中提取URL,并测试其HTTP状态代码是否等于200。

我找到了以下正则表达式来获取 URL:

$regex = "(http[s]?|[s]?ftp[s]?)(://)([^s,]+)"
select-string -Path $path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value }

但返回如下所示:

https://code.jquery.com/ui/1.9.0/themes/base/jquery-ui.css"/>
https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script>

如您所见,它并没有真正修剪 HTML 标签的末尾。

如何编辑我的正则表达式以最终获取没有 HTML 标记的 URL?

如果你看一下[^s,]否定的字符类,你会发现它匹配除空格和,以外的任何字符。如果您查看您拥有的输入,您会注意到"<以及>都可以与[^s,]匹配。

当前情况的解决方法是将<>"个字符添加到否定字符类中,以使正则表达式引擎在遇到><"字符时"停止"。

请注意,由于您提取了整个匹配项,因此您可以稍微重构模式并删除不必要的分组,并将第一个分组转换为非捕获组:

$regex = '(?:http|s?ftp)s?://[^s,<>"]+'

请注意,在 .NET 模式中,不需要转义/(它不是一个特殊的正则表达式元字符/运算符(。

最新更新