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

时间:2013-03-20 08:26:21

标签: regex powershell

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

$myString -match '\w+@\w+\.\w+'

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

2 个答案:

答案 0 :(得分:2)

-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

答案 1 :(得分:1)

Select-String方法在这里运行良好。但是,此正则表达式模式根本不适用,您应该查看以下类似的问题:Using Regex in Powershell to grab email