Übereinstimmung von Regex-Instanzen außerhalb von Anführungszeichen: Ein alternativer Ansatz
In einer früheren Frage wurde vorgeschlagen, alle Instanzen eines Regex außerhalb von Anführungszeichen abzugleichen Zitate sind unmöglich. Dies ist jedoch nicht ganz korrekt.
Eine Lösung für dieses Problem besteht darin, zu erkennen, dass ein Wort außerhalb von Anführungszeichen steht, wenn ihm eine gerade Anzahl von Anführungszeichen folgt. Dies kann als Look-Ahead-Behauptung modelliert werden:
\+(?=([^"]*"[^"]*")*[^"]*$)
Dies berücksichtigt jedoch nicht maskierte Anführungszeichen. Um dies zu handhaben, wird der Ausdruck so geändert, dass das nächste Zeichen ignoriert wird, wenn vor einem Anführungszeichen ein Backslash auftritt:
\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
Dieser komplexe Ausdruck stellt sicher, dass alle Instanzen eines regulären Ausdrucks, die nicht in Anführungszeichen stehen, abgeglichen werden, auch im Vorhandensein von maskierten Anführungszeichen.
Allgemeine Alternative für die Methoden .split() und .replace()
Diese Regex-Lösung funktioniert zwar gut, ist aber möglicherweise nicht für alle geeignet Fälle, insbesondere bei der Arbeit mit den Methoden .split() und .replace(). Ein alternativer Ansatz besteht darin, die folgenden Schritte zu verwenden:
Dieser Ansatz ist flexibler und kann in einem breiteren Spektrum von Szenarien verwendet werden.
Das obige ist der detaillierte Inhalt vonWie kann man Regex-Instanzen außerhalb von Anführungszeichen zuordnen, auch mit maskierten Anführungszeichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!