2

私はpowershellでたくさんのファイルを読み、すべてのメールアドレスを取得する必要があります。私はこの解決策を試しました

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

問題は、変数$matchesに最初の一致のみが含まれていることです。何か不足していますか?

4

2 に答える 2

4

-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
于 2013-03-20T08:40:28.000 に答える
2

ここでは、Select-String アプローチがうまく機能します。ただし、この正規表現パターンは単に適切ではないため、次の同様の質問を確認する必要があります: Powershell で正規表現を使用して電子メールを取得する

于 2017-03-24T03:44:48.607 に答える