Regex Matches Groups Captures

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Regex Matches Groups Captures

    Hallo,

    ich hab ein wenig mit Regex rumhantiert.

    VB.NET-Quellcode

    1. Dim variablen = Regex.Matches(teststring, " \[([a-zA-Z1-9_]+)\] ")
    2. For i = 0 To 4
    3. VariablenTB(i).Text = variablen(i).Value
    4. Next i
    5. Return hold


    Das findet alle Ausdrücke ähnlich zu " [variablenname] ". Es funktioniert also alles was ich brauche
    Wenn ich aber so durchgucke dann steht zum Beispiel bei variablen(i).Value die Property RegularExpressions.Capture.Value

    variablen(i) ist ein Match dieser erbt von Group und dieser von Capture. Jetzt bin ich nicht sicher ob ich verstehe was Matches, Groups und Captures sind. Im Regex Tutorial hab ich dazu nichts gefunden
    Ich erhalte als Ergebnis für mein Beispielpattern eingangs mit verschieden Methoden:

    Match.Value -> "[variablenname]"
    Match.Captures(0).Value -> " [variablenname] "
    Match.Groups(0).Value -> " [variablenname] "
    Match.Groups(1).Value -> "variablenname"

    Dazu folgende Fragen:
    Kann ein Match mehr als ein Capture haben?
    Ist Groups(0) immer gleich dem Capture?
    Gegenbeispiele wären toll

    Viele Grüße
    Hmm- das mit den Captures ist mir nie aufgefallen. Ich hab Regexe so benutzt:

    Ein Match hat viele Groups.
    Groups kann man indiziert und benannte Groups auch über ihren Namen abrufen.
    jede Group hat Index, Length und Value.

    Ausserdem erbt Match von Group, hat also auch Index, Length und Value

    Keine Ahnung, was das dolles ist da mit die Captures, und warums da auch noch eine Auflistung für gibt.

    Haudruferzappeltnoch schrieb:

    Ja er automatisiert das Match zum Capture um.
    Wattisdattn? "Umautomatisieren"??

    Haudruferzappeltnoch schrieb:

    Deswegen denke ich ja auch mehr als ein Capture gibts garnet pro Match
    keine Ahnung - guck in den ObjectBrowser:
    Match erbt von Group erbt von Capture.
    Ausserdem hat Match auch noch Groups
    Und ausserdem hat Groups auch noch Captures, also mehrere. (for whatever reason).

    Haudruferzappeltnoch schrieb:

    Deswegen denke ich ja auch mehr als ein Capture gibts garnet pro Match

    Falsch, das gibt es sehr wohl. Schau dir dazu die Doku mit dem zweiten Beispiel an. Kommt vor, wenn man mit "quantifiern" arbeitet (dem * z.B.).

    Um Regex besser zu verstehen, kann ich die Seite regex101.com empfehlen. Da gibt es den Bereich "Explanation"; dieser erklärt dir dein eingegeben Regex. Außerdem kann man dort den Regulären Ausdruck auch debuggen, wenn man möchte.
    @ErfinderDesRades
    Umautomatisieren... ja besser wohl automatisch umbauen. Das hier

    Haudruferzappeltnoch schrieb:


    Wenn ich aber so durchgucke dann steht zum Beispiel bei variablen(i).Value die Property RegularExpressions.Capture.Value
    Ich denke das ist einfach die Vererbung

    @ISliceUrPanties
    Das ist dann aber das Capture von Group und nicht von Match, mehrere Captures gibt es nur weil es mehrere Groups gibt, jede Group hat nur ein Capture. Und der Match der viele Groups hat hat trotzdem nur ein Capture. Das obige Beispiel arbeitet mit Quantifier, aber ich hab auch noch das Beispiel aus der Doku genommen, selbes Ergebnis:


    Ich meine also spezifisch das Captures() des Matches. Wie gesagt ich war nicht in der Lage ein Captures().Count > 1 zu produzieren. Das trifft auch für das Dokubeispiel zu