に可能性のリストから文字列内のすべての一致を検索します。私は単語の配列から電子メールにあった単語の配列を取得しようとしています。たとえば、次のように私は電子メールの本文(コードのこの時点で、それは単なる文字列です)、そして私が見つける必要がある単語の配列を持つ配列
$wordsArray = "foo|bar|regex|powershell"
$emailBody = "This is an email body written into a string, without breaks. foo regex."
そして、それから、私は今、私はこの機能を持っている
@("foo", "regex")
ケースは重要ではありませんが、順序は重要ではありません、など
を受け取ることを期待:
function func($emailBody, $wordsArray) {
$matched= @()
$matched+= $emailBody| Select-String $wordsArray -AllMatches | ForEach-Object { $_.Matches.Value }
return $matched | sort -Unique
}
しかし、この関数は信じられないほどの速さで成長します。私は複数の電子メールをループします。初めて実行すると0.05287秒、30回は0.11733秒、45回は1.72352秒、50は5秒を超えます。私はこれを40,000回(そして成長する)走らなければなりません。
ヒント?これは、プロセススピードアップしていない場合
残りのコードを含めることはできますか?あなたが投稿した機能の実行時間が複数の用途で増加する理由はわかりません。 – ConnorLSW
@ctwheels私はウェブメールオブジェクトとインターフェースしていません。スクリプトのこの時点では、生の文字列です。あなたは "電子メール"を "randomString"に完全に置き換えることができ、私は同じ質問をします。 –
@AxelPersingerは、さらなる混乱を避けるためにその情報をあなたの質問に追加します。 – ctwheels