我想从包含多个网址的网页中提取网址,并保存提取到一个txt文件。
网页中的网址开始'127.0.0.1',但我想从他们中删除'127.0.0.1',只提取网址。当我运行下面的ps脚本,它只保存'127.0.0.1'。任何帮助,以解决这个问题,请。
$threatFeedUrl = "https://raw.githubusercontent.com/DandelionSprout/adfilt/master/Alternate versions Anti-Malware List/AntiMalwareHosts.txt"
# Download the threat feed data
$threatFeedData = Invoke-WebRequest -Uri $threatFeedUrl
# Define a regular expression pattern to match URLs starting with '127.0.0.1'
$pattern = '127\.0\.0\.1(?:[^\s]*)'
# Use the regular expression to find matches in the threat feed data
$matches = [regex]::Matches($threatFeedData.Content, $pattern)
# Create a list to store the matched URLs
$urlList = @()
# Populate the list with matched URLs
foreach ($match in $matches) {
$urlList += $match.Value
}
# Specify the output file path
$outputFilePath = "output.txt"
# Save the URLs to the output file
$urlList | Out-File -FilePath $outputFilePath
Write-Host "URLs starting with '127.0.0.1' extracted from threat feed have been saved to $outputFilePath."
字符串
1条答案
按热度按时间q7solyqu1#
前言:
字符串
(?:…)
)而不是 * 捕获 * 组((…)
)127.0.0.1
后面有 * 空格\S
是[^\s]
的简单等价物+
仅匹配非空白字符的 * 非空 * 运行):型
型
$matches
在这里不会引起问题,但它是自动变量$Matches
的名称,因此不应用于自定义目的。型
$match.Value
是你的正则表达式匹配的 whole 文本,而你只需要 capture group 的文本。$match.Groups[1].Value
代替。型
+=
* 迭代地 * 构建数组是 * 低效的 *,因为每次迭代都必须在后台分配一个 * 新的 * 数组;只需使用foreach
语句 * 作为表达式 *,并让PowerShell为您收集结果。有关详细信息,请参阅this answer。型
Invoke-RestMethod
比Invoke-WebRequest
更简单;前者 * 直接 * 返回内容(不需要访问.Content
属性)。把它们放在一起:
型
[1]有关背景信息,请参见this blog post。