簡體   English   中英

簡單的正則表達式問題/多個匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM