使用正则表达式查找文件中的所有邮件地址

Nai*_*gel 3 regex powershell

我需要使用 powershell 读取大量文件并获取所有电子邮件地址。我尝试了这个解决方案

$myString -match '\w+@\w+\.\w+'
Run Code Online (Sandbox Code Playgroud)

问题是该变量$matches仅包含第一个匹配项。我错过了什么吗?

Fro*_* F. 5

-match返回包含内容的字符串,因此它与字符串数组配合使用效果更好,可以在其中找到每行的匹配项。你想要的是“全球”搜索,我相信它被称为。在 PowerShell 中,您可以使用参数Select-String来完成此操作-AllMatches

请尝试以下操作:

(Select-String -InputObject $myString -Pattern '\w+@\w+\.\w+' -AllMatches).Matches
Run Code Online (Sandbox Code Playgroud)

例子:

$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
Run Code Online (Sandbox Code Playgroud)