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

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


Javaの正規表現におけるメタ文字「re*」(量指定子 *)は、直前の表現・部分式の0回以上の繰り返しにマッチします。つまり、直前の要素が1回も出現しない場合でもマッチ対象となる点が特徴です。

re*の基本的な動作

例えば、正規表現 aabc* の場合は、「aab」の後に「c」が0回以上続く文字列にマッチします。したがって、「aab」「aabc」「aabcc」など、いずれもマッチ対象になります。

例1:パターンに一致する件数を数える

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

この例では、入力文字列の中から aabc* パターン(「aab」+「c」の0回以上の繰り返し)に一致する部分が4件検出されました。find() メソッドを使うことで、文字列内のすべてのマッチ箇所を順番に走査できます。

例2:数字を含む文字列を抽出する

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

public class MatchAllCharacters {
   public static void main( String args[] ) {
      String regex = "(.*)?(\\d+)";
      Scanner sc = new Scanner(System.in);
      System.out.println("5つの文字列を入力してください:");
      String input[] = new String[5];
      for (int i=0; i<5; i++) {
         input[i] = sc.nextLine();
      }
      // Patternオブジェクトの生成
      Pattern p = Pattern.compile(regex);
      System.out.println("数字を含む文字列:");
      for(int i=0; i<5;i++) {
         // Matcherオブジェクトの生成
         Matcher m = p.matcher(input[i]);
         if(m.matches()) {
            System.out.println(m.group());
         }
      }
   }
}

実行結果

test data
hello how are you 335
welcome to Tutorialspoint
数字を含む文字列:
sample text 1
hello how are you 335

この例では、正規表現 (.*)?(\d+) を使用して、キーボードから入力された5つの文字列の中から数字を含むものだけを抽出しています。「.*」は任意の文字列に、「\d+」は1個以上の数字にマッチするため、matches() がtrueを返すのは数字を含む行だけです。

このように「*」を活用すると、柔軟なパターンマッチングが可能になり、文字列の検索・抽出・バリデーションなど幅広い場面で役立ちます。

  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