Java
 Computer >> コンピューター >  >> プログラミング >> Java

Java正規表現の「+」メタ文字とは?使い方とサンプルコード解説

Javaの正規表現におけるメタ文字「+」は、直前の式(サブ式)が1回以上連続して出現する部分にマッチします。たとえば「a+」は「a」「aa」「aaa」のように、aが1個以上並んだすべての文字列に一致します。0回の出力にはマッチしないため、「0回でもよい」ことを意味する「*」とは挙動が異なる点に注意しましょう。

例1:パターンにマッチした回数を数える

次の例では、正規表現「aabc+」(「aab」の後にcが1回以上続くパターン)を使い、入力文字列の中でこのパターンが何回出現するかをカウントしています。Patternクラスで正規表現をコンパイルし、Matcherクラスのfind()メソッドで順番にマッチを検索しています。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
   public static void main(String args[]) {
      String regex = "aabc+";
      String input = "aabcabcaabcabbcaabcbcaabc";

      // Patternオブジェクトを作成
      Pattern p = Pattern.compile(regex);
      // Matcherオブジェクトを作成
      Matcher m = p.matcher(input);

      int count = 0;
      while(m.find()) {
         count++;
      }
      System.out.println("マッチした回数:" + count);
   }
}

実行結果

マッチした回数:4

入力文字列「aabcabcaabcabbcaabcbcaabc」の中に「aabc」という並びが4箇所あるため、結果は「4」となります。

例2:入力文字列に数字が含まれているか判定する

次の例では、文字クラスと「+」を組み合わせた正規表現「[0-9]+」を使用しています。これは「1桁以上の数字の並び」を表すパターンで、ユーザーが入力した文字列に数字が含まれているかどうかを判定できます。

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
   public static void main(String args[]) {
      String regex = "[0-9]+";
      Scanner sc = new Scanner(System.in);
      System.out.println("入力文字列を入力してください:");
      String input = sc.nextLine();

      // Patternオブジェクトを作成
      Pattern p = Pattern.compile(regex);
      // Matcherオブジェクトを作成
      Matcher m = p.matcher(input);

      if(m.find()) {
         System.out.println("入力された文字列には数字が含まれています");
      } else {
         System.out.println("入力された文字列には数字が含まれていません");
      }
   }
}

実行結果1(数字が含まれていない場合)

入力文字列を入力してください:
sample text
入力された文字列には数字が含まれていません

実行結果2(数字が含まれている場合)

入力文字列を入力してください:
sample data 464
入力された文字列には数字が含まれています

ポイントまとめ

  • 「+」は直前の要素が1回以上繰り返される場合にのみマッチする(0回ではマッチしない)。
  • 「*」との違い:「*」は0回以上のため、対象が存在しなくてもマッチする。
  • デフォルトでは最長一致(貪欲マッチ)で動作し、可能な限り長い範囲にマッチする。最短一致させたい場合は「+?」を使用する。
  • 「[0-9]+」のように文字クラスと組み合わせると、「1桁以上の数字の並び」など実用的なパターンを簡潔に表現できる。
  1. Javaの正規表現における$(ドル)メタ文字の使い方

    正規表現におけるサブ表現(メタ文字)「$」は、行の末尾に一致します。パターンの最後に「$」を置くことで、指定した文字列で終わるテキストだけをマッチさせることができます。なお、デフォルトでは「$」は入力全体の末尾に一致しますが、Pattern.MULTILINEフラグを有効にすると、行区切り文字(改行など)の直前にも一致するようになります。例1:行末の一致を確認する次のJavaプログラムでは、「Tutorialspoint」という文字列で終わる入力に対して、正規表現「Tutorialspoint$」が何回一致するかを数えています。import java.util.regex.Matcher; i

  2. Java正規表現のメタ文字「^(キャレット)」の使い方を解説

    正規表現におけるサブ式(メタ文字)「^」は、行の先頭にマッチします。この記号を正規表現の中で使用すると、入力文字列の中でその後に続くパターンが行頭から始まる場合に一致とみなされます。 例1:行頭のパターンにマッチするか確認する 次のサンプルコードでは、入力文字列が「Hi how are you」というフレーズで始まっているかどうかを「^」を使って判定しています。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexExample { public static void m