首頁  >  文章  >  Java  >  如何在 Java 正規表示式中使用命名擷取群組?

如何在 Java 正規表示式中使用命名擷取群組?

DDD
DDD原創
2024-11-05 16:43:02688瀏覽

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 之前的版本,以下第三方函式庫提供命名群組支援:

  • Google named-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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn