2017-05-09 2 views
1

würde Ich mag einen regulären Ausdruck erstellen, die A Spieler B und AB, wo A und B sind recht komplex reguläre Ausdrücke.reguläre Ausdrücke A, B und AB

Eine Lösung ist (A|A?B) oder (AB?|B) zu verwenden, aber dann muss ich einen der Ausdrücke wiederholen.

A?B? funktioniert nicht, da dies auch die leere Zeichenfolge entspricht.

Ist es möglich, diesen regulären Ausdruck zu erstellen, ohne weder A noch B zu wiederholen?

Antwort

1

Ja, Sie haben abwechselnd zu benutzen, aber in PCRE, können Sie Subpattern mit Subroutinenaufrufe Rekursion:

A(?<BGroup>B)?|(?&BGroup) 

Siehe regex demo.

Die (?<BGroup>B) ist eine benannte Erfassungsgruppe, deren Muster mit dem benannten Unterprogrammaufruf (?&BGroup) wiederholt wird.

Siehe Recursive patterns.

0

Ich würde gehen für die Speicherung von A und B in Variablen und erstellen Sie das Muster (AB? | B) von A und B durch Verkettung. Dies hat den Vorteil, die Lesbarkeit zu verbessern, da Sie die Untermuster A und B.

dokumentieren können