我需要使用 powershell 阅读大量文件并获取所有电子邮件地址。我试过这个解决方案
$myString -match '\w+@\w+\.\w+'
问题是该变量$matches
仅包含第一个匹配项。我错过了什么吗?
我需要使用 powershell 阅读大量文件并获取所有电子邮件地址。我试过这个解决方案
$myString -match '\w+@\w+\.\w+'
问题是该变量$matches
仅包含第一个匹配项。我错过了什么吗?
-match
返回带有内容的字符串,因此它与字符串数组一起工作得更好,它可以在每行找到匹配项。你想要的是一个“全球”搜索,我相信它被称为。在 PowerShell 中,您可以使用Select-String
参数-AllMatches
来执行此操作。
尝试以下操作:
(Select-String -InputObject $myString -Pattern '\w+@\w+\.\w+' -AllMatches).Matches
例子:
$myString = @"
user@domain.no hhaksda user@domain.com
dsajklg user@domain.net
"@
PS > (Select-String -InputObject $myString -Pattern '\w+@\w+\.\w+' -AllMatches).Matches | ft * -AutoSize
Groups Success Captures Index Length Value
------ ------- -------- ----- ------ -----
{user@domain.no} True {user@domain.no} 0 14 user@domain.no
{user@domain.com} True {user@domain.com} 23 15 user@domain.com
{user@domain.net} True {user@domain.net} 48 15 user@domain.net
Select-String 方法在这里效果很好。但是,这种正则表达式模式根本不适合,您应该查看以下类似问题:Using Regex in Powershell to grab email