我正在尝试在文本文件中搜索2行文本(一个总是放在另一行之后)。一行总是相同的:#EXTINF:Discovery Science
。但是第二个总是不同,但是具有以下模式:“ http://” ipaddress“:”一些随机端口ip地址“:”随机端口
例子:
#EXTINF:Discovery Science http://95.188.124.44:1234/udp/233.7.70.27:5000
这是我的代码:
$file = "C:\1.m3u"
$Text = [IO.File]::ReadAllText($file)
[regex]$reg = "([#EXTINF:Discovery Science http://\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b])"
$match = $reg.match($Text)
$array = @()
$array = new-object collections.arraylist
$array = while ($match.Success)
{
$match.Groups[1].value
$match = $match.nextMatch()
write-host $match
}
为了匹配任何空格,可以使用\s+
(1个或多个空格)。另外,我假设#EXTINF:Discovery Science
文本是已知的,因此使用捕获组捕获文本是没有意义的,我建议将(
右移http
。
另一点是\b
s在此表达式中是多余的,而最糟糕的部分是由组成的字符类[...]
。请注意,字符类与方括号内指定符号集中的1个符号匹配。您只需要删除它们。
这是一个正在返回的工作演示http://95.188.124.44
:
$Text = "#EXTINF:Discovery Science`r`nhttp://95.188.124.44:1234/udp/233.7.70.27:5000"
[regex]$reg = "#EXTINF:Discovery Science\s+(http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
$match = $reg.match($Text)
$array = @()
$array = new-object collections.arraylist
$array = while ($match.Success)
{
write-host $match.Groups[1].value
$match = $match.nextMatch()
}
如果需要包括端口号:5000
,只需将其添加:\d+
到正则表达式中即可:
[regex]$reg = "#EXTINF:Discovery Science\s+(http://\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+)"
如果您只需要在之后抓取1个或多个非空白符号http
,请使用:
[regex]$reg = "#EXTINF:Discovery Science\s+(http://\S+)"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句