[英]Confusion over Multiple Matches in a Regex
我已經在正則表達式測試器中測試了我的正則表達式並且語句本身看起來它應該正常工作,但是它不應該匹配4個對象,它只匹配1(整個字符串),我不知道為什么它甚至在做那...
rgx = new Regex(@"^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$");
matches = rgx.Matches("0.0.0.95");
在這一點上,如果我這樣做:
foreach (Match m in matches)
{
Console.WriteLine(m.Value);
}
當它應匹配0,0,0和95而不是整個字符串時,它只顯示“0.0.0.95”。 我在這做錯了什么?
答案 - 整個字符串的單個匹配包含我正在尋找的組匹配,以這種方式訪問:
r.r1 = Convert.ToInt32(m.Groups[1].Value);
r.r2 = Convert.ToInt32(m.Groups[2].Value);
r.r3 = Convert.ToInt32(m.Groups[3].Value);
r.r4 = Convert.ToInt32(m.Groups[4].Value);
在這種情況下,您不會獲得多個匹配項 - 其中只有一個匹配項,但它有四個捕獲組 :
^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$
// ^^^^^^^^ ^^^^^^^^ ^^^^^^^^ ^^^^^^^^
// Group 1 Group 2 Group 3 Group 4
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// Group 0
有一個特殊的組號零,包括整個匹配。
所以你需要修改你的程序,如下所示:
Console.WriteLine("One:'{0}' Two:'{1}' Three:'{2}' Four:'{3}'"
, m.Groups[1].Value
, m.Groups[2].Value
, m.Groups[3].Value
, m.Groups[4].Value
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.