首頁 >後端開發 >C++ >C# 正規表示式中的 `matches[0].Value` 和 `matches[0].Groups[1].Value` 有什麼不同?

C# 正規表示式中的 `matches[0].Value` 和 `matches[0].Groups[1].Value` 有什麼不同?

DDD
DDD原創
2024-11-03 04:15:03266瀏覽

What's the Difference Between `matches[0].Value` and `matches[0].Groups[1].Value` in C# Regular Expressions?

理解C 語言中的正規表示式群組

簡介:
正規表示式在各種程式應用中發揮重要作用,包括資料擷取和文字操作。了解如何利用正規表示式群組對於在 C# 中充分發揮其潛力至關重要。

理解問題:
開發人員繼承了一個執行正規表示式匹配的程式碼區塊,並感到困惑透過正規表示式模式所獲得的結果:

var pattern = @"\[(.*?)\]";

對於使用者輸入“Josh Smith [jsmith]”,結果看起來很簡單:

matches[0].Value == "[jsmith]"

但是,開發人員感到困惑通過附加結果:

matches[0].Groups[1].Value == "jsmith"

回答問題:

1.為什麼「jsmith」與matches[0].Groups[1].Value 相符?
正規表示式模式包含單一捕獲組,以 (.*?) 表示。此捕獲組匹配左方括號和右方括號之間的所有字元。在本例中,它捕獲“jsmith”。

2. matches[0].Groups 總是儲存多少個群組?
Groups 集合通常儲存兩個群組:整個匹配項和最後一個匹配項。但是,組的數量可能會根據正規表示式模式中指定的捕獲組而有所不同。

其他說明:

  • match.Groups [0] 始終表示整個匹配,無論捕獲組的數量有多少。
  • match.Groups[1] 表示與第一次出現的(. *?).
  • match.Groups[1].Captures 是Capture 物件的集合,包含群組內的各個擷取。

範例:
考慮更複雜的模式:

var pattern = @"\[(.*?)\](.*)";

對於輸入「ignored [john] John Johnson」:

    對於輸入「ignored [john] John Johnson」:
  • 對於輸入「ignored [john] John Johnson」:
  • match.Groups [0].Value
  • 是「[約翰]約翰·約翰遜」。
  • match.Groups[1].Value
是「約翰」。 match.Groups[2].Value 是「John Johnson」。

以上是C# 正規表示式中的 `matches[0].Value` 和 `matches[0].Groups[1].Value` 有什麼不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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