我编写的PowerShell脚本从ASPX文件中提取URL并测试其HTTP状态码是否等于200.
我找到了以下Regex来获取网址:
UPDATE TEST_GROUP sd
set SALES_DATE = TO_DATE ('01.01.2017', 'dd.mm.yyyy')
where SALES_DATE =
( select min(SALES_DATE)
from TEST_GROUP sd2
where sd.PRODUCT_ID = sd2.PRODUCT_ID
)
and sd.SALES_DATE <> TO_DATE ('01.01.2017', 'dd.mm.yyyy');
但回报看起来像这样:
$regex = "(http[s]?|[s]?ftp[s]?)(:\/\/)([^\s,]+)"
select-string -Path $path -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value }
正如您所看到的,它并没有真正削减HTML标签的结尾。
如何编辑我的正则表达式以获取最终没有HTML标签的URL?
答案 0 :(得分:2)
如果您查看[^\s,]
否定字符类,您会看到它与任何字符匹配但空格和,
。如果您查看自己的输入,您会注意到"
和<
以及>
都可以与[^\s,]
匹配。
当前情况的修复是将<>"
个字符添加到否定的字符类中,以使正则表达式引擎在遇到>
,<
和{{时“停止” 1}}字符。
请注意,由于您提取了整个匹配项,因此您可以稍微重构该模式并删除不必要的分组,并将第一个分组转换为非捕获组:
"
请注意,在.NET模式中,$regex = '(?:http|s?ftp)s?://[^\s,<>"]+'
不需要转义(它不是特殊的正则表达式元字符/运算符)。