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

【Java】正規表現の文字クラスで否定を表現する方法([^ ]の使い方)

Javaの正規表現では、文字クラスを角括弧「[ ]」で定義します。この部分式は、指定した文字の集合の中から任意の1文字にマッチします。

例えば、正規表現「[abc]」は a、b、c のいずれか1文字にマッチします。また、「[a-z]」のように範囲を指定すれば、aからzまでの間の任意の1文字にマッチさせることができます。

否定文字クラス([^ ])とは

文字クラスには否定形があり、「[^ ]」のように角括弧の中にキャレット(^)を記述して定義します。この形式は、指定した文字集合に含まれない1文字にマッチします。

例えば、正規表現「[^abc]」は a、b、c 以外の任意の1文字にマッチします。同様に「[^a-z]」は、a〜z のアルファベット以外の1文字にマッチします。

サンプルコード:母音以外の文字をカウントする

次の例では、否定文字クラス「[^aeiou]」を使用し、ユーザーが入力したテキストから母音以外の文字数をカウントします。

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 = "[^aeiou]";
        // Patternオブジェクトを作成
        Pattern pattern = Pattern.compile(regex);
        // コンパイルしたパターンを文字列に適用
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while (matcher.find()) {
            count++;
        }
        System.out.println("Number of non-vowel characters : " + count);
    }
}

実行結果

Enter input text:
sample data
Number of non-vowel characters : 7

この例では、入力「sample data」に対して母音以外の7文字がカウントされています。なお、空白文字も母音以外の文字として数えられる点に注意してください。このように否定文字クラスを使うことで、「特定の文字を除外したマッチング」を簡単に実装できます。

  1. Java正規表現のサブ式(?>re)――バックトラックしない独立パターンの解説

    Javaの正規表現におけるサブ式・メタ文字「(?>re)」は、バックトラック(後戻り)を行わない独立したパターンを表します。これは「原子グループ(atomic group)」とも呼ばれ、一度マッチに成功すると、その結果を確定してそれ以降のマッチ処理で再評価されません。バックトラックとは?通常、正規表現エンジンはパターン全体がマッチするように、部分的なマッチ結果を巻き戻して別の組み合わせを試す「バックトラック」を行います。しかし「(?>re)」で囲まれた部分は独立して扱われるため、内部でのマッチが確定した後に外側のパターンとの整合性が取れない場合でも、巻き戻しによる再試行が行われませ

  2. Javaの正規表現で文字列から数値を抽出する方法

    Javaの正規表現(Regular Expression)を使えば、文字列の中から数値だけを簡単に取り出すことができます。この記事では、実際のコード例とともに、さまざまなパターンでの数値抽出の方法を解説します。文字列を解析し、必要な情報を抜き出すスキルは、テスターにとって欠かせない能力の一つです。特にAPIテストでは、JSONやXML形式のレスポンスを解析する場面が多く、正規表現の知識が大いに役立ちます。以下では、Javaの正規表現を使って文字列から数字・数値を抽出する具体的な例を紹介します。文字列からすべての数値を抽出するimport java.util.regex.Matcher; imp