我在C#中使用以下正則表達式,雖然它幾乎完全如預期報告成功和失敗,但鑑於匹配成功,捕獲的組的實際內容似乎不可能。我對這個正則表達式有兩個不同的例子,我不確定它們是否相關。正則表達式捕獲的組與正則表達式成功不一致
Regex specialHandlerPattern = new Regex("^\\[((Regex):(.+))|((\\w+):([^:]+)(:([0-9\\.]+))?)\\]$");
Match m = specialHandlerPattern.Match("[Regex:^Aardvark_[0-2]:[0-9]+]");
//Match m = specialHandlerPattern.Match("[InclusiveTolerance:0.123:0.457]");
if (m.Success) {
Console.WriteLine("Success!");
int i = 0;
foreach(Group g in m.Groups) {
Console.WriteLine("\n\tGroup {0} = \"{1}\"", i++, g);
}
在第一種情況下,匹配按預期成功。然而,組1的內容和3不正確...兩者包括一個終端「]」被指定外的那些基團:
Success!
Group 0 = "[Regex:^Aardvark_[0-2]:[0-9]+]"
Group 1 = "Regex:^Aardvark_[0-2]:[0-9]+]"
Group 2 = "Regex"
Group 3 = "^Aardvark_[0-2]:[0-9]+]"
Group 4 = ""
Group 5 = ""
Group 6 = ""
Group 7 = ""
Group 8 = ""
在第二種情況下(切換註釋行) ,比賽也如預期那樣成功。然而,組0的內容是不正確的......領先的「[」丟失:
Success!
Group 0 = "InclusiveTolerance:0.123:0.457]"
Group 1 = ""
Group 2 = ""
Group 3 = ""
Group 4 = "InclusiveTolerance:0.123:0.457"
Group 5 = "InclusiveTolerance"
Group 6 = "0.123"
Group 7 = ":0.457"
Group 8 = "0.457"
我不明白這些比賽怎麼能成功,仍得到這些團體 - 特別是在第一種情況下似乎在這些組中包含額外的']'應該導致正則表達式匹配失敗,然後回溯。有沒有我沒有意識到的C#正則表達式的一些特殊性?
編輯: 可能是詳細的細節? 以下字符串將(違揹我的意圖)成功匹配:
"[Regex:^Aardvark_[0-2]:[0-9]+"
"InclusiveTolerance:0.123:0.457]"
你是對的,的範圍界定的 「|」沒有如預期的那樣。我想相信這是因爲在學習正則表達式的DXL中它的實現方式不同,但回想起來,我越來越不確定。 (即我習慣於「xa | bz」匹配「xbz」而不匹配「xa」的實現。) – user3277168