2017-02-02 4 views
1

私は平均実行時間を得るためにパターンを複数回実行するMeasure関数を持っています。^にパターンを追加するとStringRegExpが遅くなるのはなぜですか?

​​

This is the subject string。私の最初のパターンは(?m)^Connection:(.+)で、2番目のパターンは(?m)Connection:(.+)です。ご覧のように、唯一の違いは、行頭アンカー^です。私はそれがより速く失敗するので、前者がより速いと思った。しかし、私のテスト結果では、^のパターンは約0.9msかかり、^のパターンは約0.1msしかかからないことが報告されています。私の予測の欠陥はどこにありますか?

AutoItバージョンは3.3.14.2で、Intel Core 2 CPUを使用しています。

+2

コンテンツに大文字の 'C'が約300ありますが、1000行以上あるので、' C'よりも '^'に一致する場所がたくさんあります –

答えて

3

パターンが固定ストリングで始まる場合、正規表現エンジンが通常のウォークを開始する前に、このストリングの位置を検索するために高速アルゴリズムが使用されます。このようにして、パターンが成功する可能性のある位置だけがテストされます。

パターンの先頭に^アンカーを追加すると、この最適化が無効になります。 (パターンは固定文字列でないより始まる。)

より運針パターンが遅くすることができる理由時々です。

関連する問題