【Java入門】正規表現の文字クラスで交差(&&)を使って共通文字にマッチさせる方法
Javaの正規表現において、文字クラスは角括弧「[ ]」を使用して定義します。この部分式は、指定された文字の集合の中から任意の1文字にマッチします。たとえば、正規表現「[abc]」は、a、b、cのいずれか1文字にマッチします。
文字クラスにはさまざまなバリエーションがありますが、そのひとつが「交差(intersection)」です。交差を使うと、複数の範囲や集合に共通して含まれる文字だけにマッチさせることができます。
交差関係は「&&」演算子で定義します。たとえば、正規表現「[a-z&&[r-u]]」は、a〜zの範囲とr〜uの範囲の両方に含まれる文字、つまりrからuまでのいずれか1文字にマッチします。
サンプルコード
以下の例では、ユーザーが入力したテキストの中から、[a-z&&[r-u]] にマッチする文字(r、s、t、uのいずれか)の出現回数をカウントしています。
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter input text: ");
String input = sc.nextLine();
String regex = "[a-z&&[r-u]]";
// パターンオブジェクトを作成
Pattern pattern = Pattern.compile(regex);
// コンパイルしたパターンを文字列に対して適用
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("Number of matched characters: " + count);
}
}実行結果
Enter input text: how are you welcome to tutorialspoint Number of matched characters: 9
解説
入力テキスト「how are you welcome to tutorialspoint」には、r、s、t、u のいずれかに該当する文字が合計9個含まれているため、出力は「9」となります。
なお、「&&」による交差はJavaの正規表現特有の構文です。他の言語やツールでは使えない場合があるため、注意が必要です。また、交差は否定と組み合わせることも可能で、たとえば「[a-z&&[^bc]]」と書けば、a〜zの範囲からbとcを除いた文字にマッチさせることができます。
-
Java正規表現のサブ式(?>re)――バックトラックしない独立パターンの解説
Javaの正規表現におけるサブ式・メタ文字「(?>re)」は、バックトラック(後戻り)を行わない独立したパターンを表します。これは「原子グループ(atomic group)」とも呼ばれ、一度マッチに成功すると、その結果を確定してそれ以降のマッチ処理で再評価されません。バックトラックとは?通常、正規表現エンジンはパターン全体がマッチするように、部分的なマッチ結果を巻き戻して別の組み合わせを試す「バックトラック」を行います。しかし「(?>re)」で囲まれた部分は独立して扱われるため、内部でのマッチが確定した後に外側のパターンとの整合性が取れない場合でも、巻き戻しによる再試行が行われませ
-
Javaの正規表現で文字列から数値を抽出する方法
Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp