ホームページ  >  記事  >  Java  >  Java 正規表現で名前付きキャプチャ グループを使用するにはどうすればよいですか?

Java 正規表現で名前付きキャプチャ グループを使用するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-05 16:43:02692ブラウズ

How do I use named capturing groups in Java regular expressions?

Java の通常の名前付きグループ

背景の紹介

Java の java.regex パッケージは名前付きグループをサポートしていないため、この記事ではサードパーティの名前付きグループについて説明します。この問題を解決するにはライブラリを使用します。

名前付きグループをサポートするサードパーティ ライブラリ

Java 7

Java 7 以降、Java は名前付きグループをネイティブにサポートします。次の構造を使用できます:

  • (?capturing text): 「name」という名前の名前付きグループを定義します
  • k: 名前付きグループを参照します名前付き " name" の名前付きグループ
  • ${name}: Matcher の置換文字列でキャプチャされたグループを参照
  • Matcher.group(String name): 指定された "名前付きグループ" によって返されます入力サブシーケンス。
    詳細については、Oracle ブログを参照してください。

Java 7 以前の代替手段

Java 7 より前のバージョンの場合、次のサードパーティ ライブラリが名前付きグループのサポートを提供します。

  • Googlenamed-regex: 完全にサポートされていますが、解決すべきバグがいくつかある可能性があります。
  • jregex: 制限付きサポート (ASCII 識別子のみ)。

名前付きグループの例

次に、名前付きグループの使用例を示します:

文字列:

"TEST 123"

正規表現:

"(?<login>\w+) (?<id>\d+)"

アクセス:

matcher.group(1) == "TEST"
matcher.group("login") == "TEST"
matcher.name(1) == "login"

置換:

matcher.replaceAll("aaaaa__sssss_____") == "aaaaa_TEST_sssss_123____"
matcher.replaceAll("aaaaa_${login}_sssss_${id}____") == "aaaaa_TEST_sssss_123____"

制限事項と注意事項

  • Java 7 では、名前付きグループのサポートがまだ制限されています (詳細については、tchrist の回答を参照してください)。
  • 一部のライブラリの名前付きグループは、正規表現再帰では機能しない可能性があります。
  • 正規表現に名前付きグループを指定する場合は、命名規則に厳密に従う必要があります (ASCII 識別子のみなど)。

以上がJava 正規表現で名前付きキャプチャ グループを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。