2010-11-25 19 views
2

DaC# Regexes: Benannte und nummerierten einfangenden Gruppen

var re = new Regex(@"(?<name>\w+)(x)\1\2"); 
Console.WriteLine(re.IsMatch("yxxy")); 

Drucke True, scheint es, unbenannte Capturing Gruppen mit 1 Start sind nummeriert, und dann benannte einfangende Gruppen sind Nummern zugeordnet, anschliessend. Ist das richtig/beabsichtigtes Verhalten?

+0

Scheint wie ein seltsames Verhalten. Ich habe nie versucht, was Sie oben getan haben, aber ich dachte immer, dass es von der linken Seite mit der Nummerierung begann. –

+0

@mastoj: Ja .... Ich dachte es könnte auch ... deshalb musste ich nachforschen! – mpen

Antwort

3

Zumindest sagt MSDN so. http://msdn.microsoft.com/en-us/library/bs2twtah(VS.71).aspx. In der neueren Version dieses Artikels ist es bestätigt, aber es ist schwieriger, diese Informationen zu finden. Named matched subexpressions are numbered consecutively from left to right after matched subexpressions.

+0

Begraben in dort ... danke! – mpen

+1

@Mark: Sie sollten damit vorsichtig sein, wenn Sie in die Regexes anderer Programmiersprachen wechseln. Es ist üblicher, dass die nummerierten Gruppen streng von links nach rechts sind, unabhängig davon, ob sie auch einen Namen haben oder nicht. – tchrist

Verwandte Themen