Heim  >  Artikel  >  Backend-Entwicklung  >  Regulärer Ausdruck mit verschachtelten Wiederholungen

Regulärer Ausdruck mit verschachtelten Wiederholungen

王林
王林nach vorne
2024-02-08 21:20:301211Durchsuche

Regulärer Ausdruck mit verschachtelten Wiederholungen

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.

Frageninhalt

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

Workaround

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen