[英]simple Regex question / multiple matches
新手正則表達式問題/ C#:
考慮(。*)=(。*)以及它如何匹配“A = B = C”
因為有兩種方法可以分組和匹配,所以我決定重新獲得兩個匹配對象:
(A = B) = (C)
or
(A) = (B = C)
但是我只返回一個匹配對象(第一種情況)。 所以我想我不明白為什么匹配集合是一個集合 - 因為我似乎無法獲得多個項目。 誰能解釋一下?
fyi - 對於上面的測試,我只使用了immed窗口:
?Regex.Matches("A = B = C", "(.*)=(.*)").Count
1
?Regex.Matches("A = B = C", "(.*)=(.*)")[0].Groups[1].Captures[0]
Value: "A = B"
?Regex.Matches("A = B = C", "(.*)=(.*)")[0].Groups[1].Captures[1]
Value: "C"
Matches
返回的集合包含連續匹配,而不是字符串相同部分的替代匹配。 因此,如果你傳入一個像“A = B \\ nC = D”的字符串,你將得到兩個匹配:一個用於“A = B”,一個用於“C = D”(因為.
不符合換行符) 。
.*
通常是貪婪的。 這意味着它在滿足表達式的同時匹配盡可能多的字符。 因此,第一個.*
匹配“A = B”,留下“C”代表第二個.*
您可以使用?更改行為? 表達之后。 .*?
在滿足表達式的同時,將匹配盡可能少的字符。
正則表達式以這樣的方式工作:當找到匹配時,已經匹配的輸入部分從那時起被忽略。 因此,當A = B
匹配時,輸入的那部分將不再受到任何匹配。
它不會那樣工作....
如果您的輸入文本是:
"A = B = C\r\nW = X = Z"
你的表達是
"([^=]?) = ([^=]?) = ([^=]?)"
然后你會得到多個結果。 請閱讀文檔! :-D
*量詞是貪婪的。 它使第一個表達式.*
匹配盡可能多的字符,因此,表達式將始終匹配(A = B) = (C).
使用非貪心量詞*?
將匹配(A) = (B = C)
。
嘗試使用它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.