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()による部分検索と組み合わせても利用できるため、ログ解析や入力値チェックなど、さまざまな場面で活用できます。
-
JavaとOpenCVで線を描画する方法をわかりやすく解説
Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画
-
Java正規表現(RegEx)で任意の文字にマッチさせる方法
Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j