Was ist der Unterschied zwischen einer Gruppe und einem Match in .NETs RegEx?

StackOverflow https://stackoverflow.com/questions/29088

  •  09-06-2019
  •  | 
  •  

Frage

Was ist der Unterschied zwischen a Gruppe und ein Übereinstimmen in .NETs RegEx?

War es hilfreich?

Lösung

A Übereinstimmen ist ein Objekt, das angibt, dass ein bestimmter regulärer Ausdruck mit dem Zieltext (oder einem Teil davon) übereinstimmt.A Gruppe gibt einen Teil einer Übereinstimmung an, wenn der ursprüngliche reguläre Ausdruck Gruppenmarkierungen enthielt (im Grunde ein Muster in Klammern).Zum Beispiel mit folgendem Code:

string text = "One car red car blue car";
string pat = @"(\w+)\s+(car)";
Match m = r.Match(text);

m wäre ein Übereinstimmungsobjekt, das zwei Gruppen enthält – Gruppe 1, von (\w+), und das hat „One“ und Gruppe 2 (von (car)), das, nun ja, zu „Auto“ passte.

Andere Tipps

Ein Match ist ein Teil einer Zeichenfolge, der mit dem regulären Ausdruck übereinstimmt. Daher kann es innerhalb einer Zeichenfolge mehrere Übereinstimmungen geben.

Innerhalb eines Matches können Sie anonyme oder benannte Gruppen definieren, um die Aufteilung eines Matches zu erleichtern.Ein einfaches Beispiel besteht darin, einen regulären Ausdruck zu erstellen, um nach URLs zu suchen, und dann darin enthaltene Gruppen zu verwenden, um das Protokoll (http), die Domäne (www.web.com), den Pfad (/lol/cats.html) und Argumente und was nicht zu finden.

// Example I made up on the spot, probably doesn't work very well
"(?<protocol>\w+)://(?<domain>[^/]+)(?<path>/[^?])"

Ein einzelnes Muster kann, wie gesagt, mehrmals in einer Zeichenfolge gefunden werden. Wenn Sie also Regex.Matches(string text) verwenden, erhalten Sie mehrere Übereinstimmungen zurück, die jeweils aus null, einer oder mehreren Gruppen bestehen.

Diese benannten Gruppen können entweder durch Indizierung nach Nummer oder mit einer Zeichenfolge gefunden werden.Das obige Beispiel kann wie folgt verwendet werden:

Match match = pattern.Match(urls);
if (!match.Success) 
    continue;
string protocol = match.Groups["protocol"].Value;
string domain = match.Groups[1].Value;

Um die Sache noch interessanter zu machen, könnte eine Gruppe mehrmals zugeordnet werden, aber dann empfehle ich, mit dem Lesen zu beginnen Dokumentation.

Sie können Gruppen auch verwenden, um Rückverweise zu generieren und teilweise zu suchen und zu ersetzen. Mehr dazu erfahren Sie weiter unten MSDN.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top