Heim > Artikel > Backend-Entwicklung > Wie funktioniert die reguläre Ausdruckskomponente „[^][]' beim Abgleichen verschachtelter eckiger Klammern?
Was bedeutet der reguläre Ausdruck „[^][]“?
Im bereitgestellten regulären Ausdruck:
\[(?:[^][]|(?R))*\]
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) [^ ][ ] [ ] ] [ [ ] [^ [ ]
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
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!