マーティンBodewes:
私は100%のクローンを作成したい場合にString#contains(CharSequence s): boolean
使用してJavaの正規表現でPattern
。次の呼び出しは同じでしょうか?
input.contains(s);
そして
Pattern.compile(".*" + Pattern.quote(s) + ".*").matcher(input).matches();
同様に、次のコードは、同じ機能を持っているでしょうか?
Pattern.compile(Pattern.quote(s)).matcher(input).find();
私は正規表現検索が少なくパフォーマンスが、唯一の定数係数であると推定します。これは正しいです?模倣するために正規表現を最適化する方法はありますかcontains
?
私が求めている理由は、私の周りに書かれたコードの一部を持っているということですPattern
、使用しているコードの別個の部品を作成するために無駄なようですcontains
。でもマイナーなもの- -各コードの一方、私は別のテスト結果を望んでいません。例えば、任意のUnicode関連の違いは、ありますか?
Wiktor第Stribiżav:
あなたが書く必要がある場合.contains
に基づく方法などをPattern
、あなたが選択する必要がありMatcher#find()
、バージョンを:
Pattern.compile(Pattern.quote(s)).matcher(input).find()
あなたが使用したい場合は.matches()
:、あなたがいることを心に留めなければなりません
.*
デフォルトでは改行にマッチし、あなたは必要はありません(?s)
パターンや、使用開始時にインライン修飾子Pattern.DOTALL
オプション.*
パターン開始時には、あまりにも多くのバックトラックが発生します、あなたは、スタックオーバーフロー例外を取得したり、コードの実行だけでフリーズする場合があります。