Wie funktioniert die reguläre Ausdruckskomponente „[^][]' beim Abgleichen verschachtelter eckiger Klammern?

Susan Sarandon
Freigeben: 2024-11-07 07:03:02
Original
649 Leute haben es durchsucht

How does the

Was bedeutet der reguläre Ausdruck „[^][]“?

Im bereitgestellten regulären Ausdruck:

\[(?:[^][]|(?R))*\]
Nach dem Login kopieren

Die Regex-Komponente „[^][]“ ist eine Zeichenklasse, die jedem Zeichen außer „[“ oder „]“ entspricht.

Erklärung der Zeichenklasse

A Die Zeichenklasse entspricht jedem Zeichen innerhalb des angegebenen Zeichenbereichs. In diesem Fall bedeutet „[^]“ „ohne ]“, sodass „[^][]“ effektiv mit jedem Zeichen übereinstimmt, auf das nicht „]“ folgt.

Regex-Rekursion

Die Klammern um „[^][]“ weisen auf eine nicht erfassende Gruppe hin. Innerhalb der Gruppe stellt das „?R“-Token einen rekursiven Verweis auf die gesamte Regex dar. Dadurch kann die Regex mit verschachtelten eckigen Klammern übereinstimmen.

Escape-Sequenzen vermeiden

Beachten Sie, dass dies in PCRE (der Regex-Engine, die von den preg_-Funktionen von PHP verwendet wird) nicht der Fall ist notwendig, um „[“ oder „]“ innerhalb einer Zeichenklasse zu maskieren. Dies liegt daran, dass eindeutig ist, dass das „]“ in „[^][]“ zur Zeichenklasse gehört.

Inline xx Modifier (PHP 7.3)

In PHP 7.3 können Sie den Inline-Modifizierer xx verwenden, um Leerzeichen innerhalb von Zeichenklassen zu ignorieren. Dadurch können Sie die folgenden weniger mehrdeutigen Klassen schreiben:

(?xx) [^ ][ ]     [ ] ]      [ [ ]      [^ [ ]
Nach dem Login kopieren

Kompatibilität und Macken

Die Syntax „[^][]“ ist mit den meisten Regex-Varianten kompatibel , einschließlich PCRE, Perl, Python, Java und andere. Es wird jedoch in Ruby und JavaScript nicht erkannt (außer in älteren Versionen von Internet Explorer).

Verschachtelte eckige Klammern-Übereinstimmung

Im Kontext Ihrer Beispiel-Regex: „[^][]“ stellt sicher, dass ausgewogene eckige Klammern übereinstimmen, was die Übereinstimmung verschachtelter eckiger Klammern ermöglicht.

Zusätzliche Hinweise

  • "[^ ]]“ ist eindeutig, da „[^]“ mit Zeichen übereinstimmt, denen kein „] folgt“, sodass das nachfolgende „]“ zur Zeichenklasse gehört.
  • Moderne JavaScript-Browser folgen im Allgemeinen der ECMA-Spezifikation, die „ []“ als Regex-Token, das immer nicht übereinstimmt.
  • Der bereitgestellte optimierte Regex „([[^][](?:(?-1)[^][] )* ])“ verbessert die Leistung, indem unnötige Änderungen vermieden werden.

Das obige ist der detaillierte Inhalt vonWie funktioniert die reguläre Ausdruckskomponente „[^][]' beim Abgleichen verschachtelter eckiger Klammern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage