Java正規表現で指定した2つの式のいずれかに一致させる方法(|演算子の使い方)
Javaの正規表現では、論理OR演算子「|」を使用することで、指定した2つの式のうちどちらか一方に一致させることができます。
例えば、ひとつの正規表現パターンで複数の条件にマッチさせたい場合、それぞれの式を「|」で区切って記述するだけで実現できます。
論理OR演算子「|」の基本
「|」は「または」を意味する演算子です。A|B と書くと、「Aに一致する、またはBに一致する」という意味になります。これにより、単一のパターンで複数の候補を柔軟に扱えるようになります。
例1:「hello」で始まる、または「bye」で終わる文字列に一致させる
次の例では、入力された文字列が「hello」で始まるか、あるいは「bye」で終わるかを判定しています。
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();
// "hello"で始まる、または"bye"で終わる文字列に一致する正規表現
String regex = "^hello|bye$";
// 正規表現をコンパイルする
Pattern pattern = Pattern.compile(regex);
// Matcherオブジェクトを取得する
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
System.out.println("一致しました");
} else {
System.out.println("一致しませんでした");
}
}
}実行結果1
文字列を入力してください hello how are you 一致しました
入力が「hello」で始まっているため、パターンに一致しています。
実行結果2
文字列を入力してください This is a sample string 一致しませんでした
この文字列は「hello」で始まっておらず、「bye」でも終わっていないため、一致しません。
例2:入力値が「yes」または「no」であるかを判定する
次の例では、matches() メソッドを使って、入力値が完全に「yes」または「no」と一致するかどうかを確認しています。
import java.util.Scanner;
public class RegexExample {
public static void main(String args[]) {
// "yes"または"no"に一致する正規表現
String regex = "yes|no";
System.out.println("入力値を入力してください:");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
boolean bool = input.matches(regex);
if (bool) {
System.out.println("一致しました");
} else {
System.out.println("一致しませんでした");
}
}
}実行結果1
入力値を入力してください: yes 一致しました
実行結果2
入力値を入力してください: hello 一致しませんでした
find() と matches() の違いに注意
例1で使用した find() は、文字列の一部がパターンに一致すればtrueを返すのに対し、例2の matches() は文字列全体がパターンと完全に一致した場合のみtrueを返します。用途に応じて適切なメソッドを選択することが重要です。
-
Java正規表現(RegEx)で任意の文字にマッチさせる方法
Javaの正規表現におけるメタ文字「.」(ドット)は、任意の1文字にマッチします。マッチ対象はアルファベットでも数字でも、記号などの特殊文字でも構いません。メタ文字「.」の基本「.」は改行文字以外のあらゆる単一文字と一致するため、パターンの柔軟性を高めたい場面で非常に便利です。なお、ドットそのもの(リテラルの「.」)にマッチさせたい場合は、バックスラッシュでエスケープして「\.」と記述します。例1:任意の1文字とのマッチ次のプログラムでは、ユーザーから入力された文字列に対して正規表現「.」を適用し、文字数をカウントしています。import java.util.Scanner; import j
-
JavaのGsonで@SerializedNameアノテーションを使ってJSONプロパティ名を変更する方法
JavaのオブジェクトをJSONに変換する際、クラスのフィールド名とは異なるプロパティ名で出力したいケースはよくあります。そんなときに役立つのが、Gsonが提供する@SerializedNameアノテーションです。このアノテーションを付与すると、シリアライズ(JSONへの変換)・デシリアライズ(JSONからの復元)の両方において、指定した名前がフィールド名として使用されます。なお、@SerializedNameはGsonインスタンスに設定されたデフォルトの命名ポリシーを含む、あらゆるFieldNamingPolicyを上書きします。命名ポリシー自体を切り替えたい場合は、GsonBuilderク