Heim  >  Artikel  >  Backend-Entwicklung  >  Regulärer Ausdruck, um Text zwischen Klammern vom Abgleich auszuschließen

Regulärer Ausdruck, um Text zwischen Klammern vom Abgleich auszuschließen

WBOY
WBOYnach vorne
2024-02-09 21:51:09860Durchsuche

Regulärer Ausdruck, um Text zwischen Klammern vom Abgleich auszuschließen

php-Editor Banana stellt Ihnen ein leistungsstarkes und häufig verwendetes Tool zur Zeichenfolgenverarbeitung vor – reguläre Ausdrücke. Reguläre Ausdrücke können beim Abgleichen von Zeichenfolgen Text in Klammern ausschließen, was bei der Verarbeitung komplexer Textdaten sehr nützlich ist. Durch einfache Syntaxregeln können wir Zeichenfolgen einfach filtern und extrahieren und so die Effizienz und Genauigkeit der Datenverarbeitung verbessern. Unabhängig davon, ob Sie Webseiten entwickeln, Daten verarbeiten oder Textanalysen durchführen, ist die Beherrschung regulärer Ausdrücke eine wesentliche Fähigkeit. Lassen Sie uns gemeinsam reguläre Ausdrücke lernen und unsere String-Verarbeitungsfähigkeiten verbessern!

Frageninhalt

Angesichts des folgenden Textes:

{field1} == value1 && {field2} == value2  && ({field3} == value3 && {field4} == value4) && {field5} == value5

Ich versuche, eins mit allen && 匹配的正则表达式,但排除括号之间的内容(因此 value3 和 field4 之间的 && 应被忽略)。我已经能够使用以下正则表达式来完成此操作: (&{2})(?![^(]*)) zu diesem Text zu erstellen [das funktioniert und tut, was ich brauche], aber das Problem ist, dass ich Golang verwende, das kein negatives Lookahead unterstützt. Gibt es eine Möglichkeit, dies ohne negativen Lookahead zu tun? Klammern können nicht verschachtelt werden.

Grundsätzlich möchte ich durch && teilen, aber ignorieren, was zwischen den Klammern steht, und so etwas erhalten wie:

[&&, &&, &&]
[{field1} == value1, {field2} == value2, ({field3} == value3 && {field4} == value4), {field5} == value5]

Danke!

Problemumgehung

Sie können eine Technik verwenden, mit der Sie alles abgleichen, was Sie nicht möchten, aber nicht erfassen, und alles abgleichen und erfassen, was Sie möchten (d. h. in einer Erfassungsgruppe speichern). Sie können dazu den folgenden regulären Ausdruck verwenden.

\([^\]]*\)|(&&)

lautet „Übereinstimmen Sie die in Klammern oder (|) 匹配字符串 ”&&“ eingeschlossene Zeichenfolge und speichern Sie sie, um Gruppe 1 zu erfassen“. Die Idee (im Code) besteht darin, nicht erfasste Übereinstimmungen zu ignorieren.

Für die folgenden Zeichenfolgen werden Übereinstimmungen angezeigt (dargestellt durch "m"s 表示)和捕获(由 "c"s).

{f1} == v1 && {f2} == v2  && ({f3} == v3 && {f4} == v4) && {f5} == v5
           mm                mmmmmmmmmmmmmmmmmmmmmmmmmm mm
           cc                                           cc

Demo

Übereinstimmungen in der Zeichenfolge ({)的开头,([^]]*)(&&) 都不匹配,因此字符串指针前进一位到 f。同样,没有匹配项,因此字符串指针又前进一个字符,指向 1。这将继续(没有匹配项),直到到达第一个 &([^]]*) 不匹配,但 (&&). Wir sind an dieser Übereinstimmung interessiert, da sie erfasst wurde (Erfassungsgruppe 1).

Der String-Zeiger bewegt sich dann ein Zeichen nach dem anderen vorwärts und findet keine weiteren Übereinstimmungen, bis er die (。此时,({f3} == v3 && {f4} == v4)([^]]*)-Übereinstimmung erreicht, aber da er nicht erfasst wird, ist uns das egal. Dies wird so lange fortgesetzt, bis das Ende der Zeichenfolge erreicht ist.

Alternativ können wir reguläre Ausdrücke verwenden

\([^\]]*\)|&&

Und überprüfen Sie das erste Zeichen jeder Übereinstimmung. Wenn ja (, geben wir es auf, über das Spiel nachzudenken.

Wenn jedes Vorkommen von && gefunden wird, können wir es (im Code) durch eine andere (möglicherweise leere) Zeichenfolge ersetzen, seinen Offset in der Zeichenfolge ermitteln (aus irgendeinem Grund) oder einfach einen Zähler für die Anzahl der Übereinstimmungen in der Zeichenfolge erhöhen. Dies hängt natürlich davon ab, warum wir diese Zeichenfolgen abgleichen möchten.

Das obige ist der detaillierte Inhalt vonRegulärer Ausdruck, um Text zwischen Klammern vom Abgleich auszuschließen. 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