Gruppennummerierung mit optionalen Blöcken in einem regulären Ausdruck

8

Gibt es eine Möglichkeit, einen Ausdruck in Klammern zu finden, nicht in einer Gruppe gefangen werden?

z. Ich habe einen Ausdruck in etwa so:

%Vor%

Beachten Sie die optionalen Blöcke (B|C)? und (F|G)? , die Klammern benötigen.
Ich bin nicht daran interessiert, was in diesen Gruppen gefangen wurde. Alles was ich will ist, den ersten und letzten Block zu fangen.

Aber wegen der optionalen Blöcke ändert sich die Gruppennummerierung und ich kann nicht sagen, ob (E(F|G)?) als Gruppe 2 oder 3 abgefangen wurde.

Kann ich dem Ausdruck sagen, dass die optionalen Teile in den Ergebnisgruppen ignoriert werden sollen, damit die Gruppennummerierung gleich bleibt? Oder kann ich optionale Fänge immer in Gruppen anzeigen lassen - selbst wenn sie null sind?

    
Stroboskop 10.02.2010, 12:02
quelle

2 Antworten

15

(E(F|G)?) wird immer als Gruppe 3 abgefangen. Die Nummerierung wird durch die Reihenfolge der öffnenden Klammern in der Musterzeichenfolge bestimmt, die lautet:

%Vor%

Wenn (B|C) nicht in der Eingabezeichenfolge auftritt, gibt group(2) null zurück, aber die nachfolgenden Gruppen werden nicht neu nummeriert.

Die einzigen Gruppen, die die Nummerierung nicht beeinflussen, sind nicht einfangende Gruppen, z. B.

%Vor%

Beispiel:

%Vor%

Ausgabe:

%Vor%     
finnw 10.02.2010, 13:28
quelle
9

Es gibt nicht einfangende Gruppen (?:…) :

%Vor%

Die Übereinstimmung einer solchen Gruppe kann nicht referenziert werden.

    
Gumbo 10.02.2010 12:05
quelle

Tags und Links