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

Regulärer Ausdruck mit verschachtelten Wiederholungen

王林
Freigeben: 2024-02-08 21:20:30
nach vorne
1232 Leute haben es durchsucht

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}$`)
Nach dem Login kopieren

Ich erhalte die folgende Fehlermeldung

error parsing regexp: invalid repeat count: `{1,50}`
Nach dem Login kopieren

Mir ist aufgefallen, dass es bis zu 31 Mal wiederholt werden kann, so

r, err := regexp.Compile(`^(a{1,32}\s?){1,31}$`)
Nach dem Login kopieren

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!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage