php-Editor Xiaoxin stellt Ihnen in diesem Artikel reguläre Ausdrücke mit verschachtelten Wiederholungen vor. Reguläre Ausdrücke sind ein leistungsstarkes Tool zum Abgleichen von Zeichenfolgen, mit dem Zeichenfolgen gesucht, ersetzt und validiert werden können. Unter verschachtelter Wiederholung versteht man die Verwendung eines oder mehrerer wiederholter Muster in einem regulären Ausdruck. Diese wiederholten Muster können in anderen Mustern verschachtelt werden. Diese Technik kann verwendet werden, um Text mit einer hierarchischen Struktur wie HTML-Tags, verschachtelten Klammern usw. abzugleichen. Durch das Verständnis der Syntax und Verwendung verschachtelter wiederholter regulärer Ausdrücke können wir flexibler auf verschiedene komplexe Anforderungen an die Zeichenfolgenübereinstimmung reagieren.
Ich versuche in go einen regulären Ausdruck zu erstellen, der bis zu 50 durch Leerzeichen getrennte Wörter abgleicht, wobei jedes Wort 1-32 „a“ hat. Ich verwende den folgenden regulären Ausdruck
regexp.compile(`^(a{1,32}\s?){1,50}$`)
Ich erhalte die folgende Fehlermeldung
error parsing regexp: invalid repeat count: `{1,50}`
Mir ist aufgefallen, dass es bis zu 31 Mal wiederholt werden kann, so
r, err := regexp.Compile(`^(a{1,32}\s?){1,31}$`)
Siehe https://go.dev/play/p/rlnrox9-57_m
Gos regexp
-Engine hat ein Limit, bei dem die Kombination aus der obersten Ebene und allen inneren Wiederholungen 1000 Kopien der innersten Wiederholung nicht überschreiten darf Teil . Dies ist in der re2-Grammatikspezifikation dokumentiert.
In Ihrem Fall funktionieren bis zu 31, weil innere 32 * äußere 31 = 992. 32 * 32 = 1024 und 32 * 50 = 1600 funktionieren über diese Grenze hinaus nicht.
Die Lösung besteht darin, den Ausdruck in Teile aufzuteilen: ^(a{1,32}s?){1,31}(a{1,32}s?){0,19}$
p>
Das obige ist der detaillierte Inhalt vonRegulärer Ausdruck mit verschachtelten Wiederholungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!