文字列の#は、パターンを使用して含まれています

マーティン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オプション
  • .*パターン開始時には、あまりにも多くのバックトラックが発生します、あなたは、スタックオーバーフロー例外を取得したり、コードの実行だけでフリーズする場合があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=14296&siteId=1