5

これらのうち、パフォーマンスが高いのはどれですか、または(同等の場合)どちらが読みやすいですか?かっこ内のすべてを一致させようとしています。

Pattern p1 = Pattern.compile("\\([^)]*\\)");
Pattern p2 = Pattern.compile("\\(.*?\\)");

私にとって、2番目の方が読みやすくなりますが、混乱を招く可能性のある不本意な数量詞を使用しているため、パフォーマンスが低下するかどうかはわかりません。

編集

これがさらに優れていることを示す答えをお見逃しなく:

Pattern p3 = Pattern.compile("\\([^)]*+\\)");
4

2 に答える 2

5

\([^)]*\)入力が小さい場合は目立たないものの、高速になります。[^)]*所有格を作成すると、より良いゲインが発生する可能性があります[^)]*+[^)]*そうすれば、正規表現エンジンは、バックトラックする必要がある場合に備えて、すべての文字の一致を追跡しません(の場合は発生しません[^)]*\))。パターンを所有格にすると、正規表現エンジンはこのパターンが一致した文字を記憶しなくなります。

繰り返しになりますが、これは目立たないかもしれませんが、入力が大きくなった場合(r)、との差はとの差よりも小さいと確信しています.*?[^)]*[^)]*[^)]*+

*確実にいくつかのベンチマークを実行してください!

于 2012-10-05T08:59:18.870 に答える
3

p2これは、バックトラックの原因となる貪欲でない方法と比較して、パフォーマンスが優れています。

Pattern p1 = Pattern.compile("\\([^)]*\\)");

この記事を見てください。

于 2012-10-05T08:54:18.107 に答える