「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Java 正規表現でのグループのキャプチャはどのように機能しますか?

Java 正規表現でのグループのキャプチャはどのように機能しますか?

2024 年 11 月 17 日に公開
ブラウズ:831

How do Capturing Groups Work in Java Regular Expressions?

Java Regex キャプチャ グループについて

このコード スニペットでは、Java の正規表現 (regex) ライブラリを使用して文字列の一部を抽出します。正規表現は「(.)(\d )(.)」として定義されます。ここで:

  • (.*): 次のグループの前の任意の数の任意の文字と一致します。 .
  • (\d ): 前のグループの後の任意の桁数と一致します。
  • (.*): 前のグループの後の任意の数の任意の文字と一致します。

正規表現の実行

文字列「この注文は QT3000 に対して行われました! OK?」に対して正規表現が実行されると、次の結果が生成されます:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000

貪欲な量指定子について

正規表現で使用されるデフォルトの量指定子は貪欲であり、次のグループを満たすためにできるだけ多くの文字と一致することを意味します。この場合、「.*」は最初の数字が見つかるまで文字列全体と一致し、3 番目のグループには文字が残りません。

Using Reluctant Quantifiers

一致するには必要な文字のみを使用するには、疑問符で示された消極的な数量詞を使用できます。 「(.)」を「(.?)」に置き換えると、可能な最小数の文字に一致し、次の出力が得られます。

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000

グループをキャプチャする利点

グループをキャプチャすると、一致する文字列の特定の部分を抽出して後で使用できるようになります。この例では、以下のコード スニペットに示すように、「Matcher」オブジェクトの「group()」メソッドを通じて各グループの一致した値にアクセスできます。

Pattern pattern = Pattern.compile("(.*?)(\\d )(.*)");
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
    System.out.println("group 1: "   matcher.group(1));
    System.out.println("group 2: "   matcher.group(2));
    System.out.println("group 3: "   matcher.group(3));
}
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3