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

Javaの正規表現(RegEx)で文字列・行の末尾に一致させる方法

正規表現におけるメタ文字「$」は、特定の文字列の末尾に一致します。つまり、文字列(または行)の最後の文字が指定したパターンと一致するかどうかを判定できます。

  • 式「\\d$」…… 数字で終わる文字列・行に一致します。

  • 式「[a-z]$」…… 小文字のアルファベットで終わる文字列・行に一致します。

例1:英数字以外の文字で終わる文字列の判定

次の例では、ユーザーから入力された文字列が、英数字以外の記号で終わっているかどうかを判定します。

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

public class Example {
   public static void main(String args[]) {
      // ユーザーから文字列を読み込む
      System.out.println("文字列を入力してください");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();
      String regex = ".*[^a-zA-Z0-9//s]$";
      // 正規表現をコンパイルする
      Pattern pattern = Pattern.compile(regex);
      // Matcherオブジェクトを取得する
      Matcher matcher = pattern.matcher(input);
      if(matcher.matches()) {
         System.out.println("一致しました");
      } else {
         System.out.println("一致しませんでした");
      }
   }
}

実行結果1

文字列を入力してください
this is sample text#
一致しました

入力された文字列は「#」という記号で終わっているため、パターンに一致しました。

実行結果2

文字列を入力してください
hello how are you
一致しませんでした

一方、こちらの入力は英字のみで構成され、末尾に記号がないため一致しませんでした。

例2:ピリオド(.)で終わる文字列の抽出

複数の文字列の中から、ピリオドで終わるものだけを抽出する例です。正規表現「\\.$」では、「\\.」とエスケープすることで、任意の1文字を表すメタ文字としてのドットではなく、リテラルの「.」そのものに一致させています。

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

public class RegexExample {
   public static void main( String args[] ) {
      String regex = "\\.$";
      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);
      for(int i=0; i<5;i++) {
         // Matcherオブジェクトを作成する
         Matcher m = p.matcher(input[i]);
         if(m.find()) {
            System.out.println("文字列 " + i + " は「.」で終わっています");
         }
      }
   }
}

実行結果

5つの文字列を入力してください:
hello how are you.
where do you live
what is your name.
welcome to tutorialspoint
The Biggest Online Tutorials Library.
文字列 0 は「.」で終わっています
文字列 2 は「.」で終わっています
文字列 4 は「.」で終わっています

5つの入力文字列のうち、0番目・2番目・4番目の文字列だけがピリオドで終わっていることが確認できます。

まとめ

メタ文字「$」を使えば、文字列や行の末尾が特定のパターンで終わっているかどうかを簡単に判定できます。matches()による完全一致のほか、find()による部分検索と組み合わせても利用できるため、ログ解析や入力値チェックなど、さまざまな場面で活用できます。

  1. JavaとOpenCVで線を描画する方法をわかりやすく解説

    Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画

  2. Java正規表現(RegEx)で任意の文字にマッチさせる方法

    Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j