我正在编写一个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 模式中,不需要转义/
(它不是一个特殊的正则表达式元字符/运算符(。