正则表达式从ASPX File PowerShell读取URL

时间:2017-08-18 07:13:59

标签: regex powershell

我编写的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?

1 个答案:

答案 0 :(得分:2)

如果您查看[^\s,] 否定字符类,您会看到它与任何字符匹配但空格和, 。如果您查看自己的输入,您会注意到"<以及>都可以与[^\s,]匹配。

当前情况的修复是将<>"个字符添加到否定的字符类中,以使正则表达式引擎在遇到><和{{时“停止” 1}}字符。

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

"

请注意,在.NET模式中,$regex = '(?:http|s?ftp)s?://[^\s,<>"]+' 不需要转义(它不是特殊的正则表达式元字符/运算符)。