ホームページ  >  記事  >  Java  >  \".*\" を使用すると String.replaceAll(regex) が 2 回置換されるのはなぜですか?

\".*\" を使用すると String.replaceAll(regex) が 2 回置換されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 16:03:46603ブラウズ

Why does String.replaceAll(regex) replace twice when using

String.replaceAll(regex) が 2 回置換される理由

コード スニペット内:

System.out.println("test".replaceAll(".*", "a"));

正規表現.* は、ゼロ文字を含む任意の文字に一致します。これは、文字列全体と 2 回一致できることを意味します。

  • 最初のパスでは、.* は文字列全体と一致し、それを "a" に置き換えます。
  • 2 番目のパスでは、 .* は入力の末尾にある空の文字列と一致し (ゼロ文字と一致する可能性があるため)、それを別の "a" に置き換えます。

この動作は Java 正規表現エンジンのバグとはみなされません。代わりに、これは .* が任意の文字に一致する方法の結果です。

代替手段

この動作を回避するには、次の代替手段を使用できます:

  • 最初に出現したもののみを置換するには .replaceFirst() を使用します:
"test".replaceFirst(".*", "a")
  • 文字列全体が指定された正規表現と一致するかどうかを確認するには .matches() を使用します:
System.out.println("test".matches(".*")); // Prints true
  • など、より具体的な正規表現を使用します。 少なくとも 1 つの文字が必要です:
System.out.println("test".replaceAll(".+", "a")); // Prints a

以上が\".*\" を使用すると String.replaceAll(regex) が 2 回置換されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。