私はpowershellでたくさんのファイルを読み、すべてのメールアドレスを取得する必要があります。私はこの解決策を試しました
$myString -match '\w+@\w+\.\w+'
問題は、変数$matches
に最初の一致のみが含まれていることです。何か不足していますか?
私はpowershellでたくさんのファイルを読み、すべてのメールアドレスを取得する必要があります。私はこの解決策を試しました
$myString -match '\w+@\w+\.\w+'
問題は、変数$matches
に最初の一致のみが含まれていることです。何か不足していますか?
-match
コンテンツを含む文字列を返すため、行ごとに一致を見つけることができる文字列配列でより適切に機能します。あなたが望むのは、「グローバル」検索だと思います。PowerShellSelect-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 アプローチがうまく機能します。ただし、この正規表現パターンは単に適切ではないため、次の同様の質問を確認する必要があります: Powershell で正規表現を使用して電子メールを取得する