2016-09-07 4 views
1

ich doppelte Anführungszeichen innerhalb größere Zeichenfolge wie passen müssen:Wie doppelte Anführungszeichen übereinstimmen mit PHP

"foo bar" == "" 

es sollte für diese

"foo \" bar" == "\"" 

sollte "foo \" bar""foo bar" und "" und entsprechen entsprechen und "\"" bisher habe ich diese Regex:

(?<!\\\\)"(?:\\\\"|[^"])*(?<!\\\\)" 

DEMO

aber es endet nach dem ersten Escape-Zitat. und geben Sie nicht "foo \" bar" zurück.

+0

Sie viel Kontext gegeben haben, nicht zu arbeiten, was diese Strings in Anführungszeichen, aber das Beispiel, das Sie gegeben haben, sieht sehr ähnlich aus wie eine Art Programmierausdruck. Wenn das der Fall ist, ist es sehr wahrscheinlich besser, einen Sprachparser als Regex zu verwenden - diese Art von Dingen kann sehr schnell sehr komplex werden und Regex neigt dazu, wirklich mit ihnen zu kämpfen. – Simba

Antwort

1

Ich würde verwenden:

(?<!\\)"(?:\\"|[^"])*(?<![^\\]\\)" 

Demo auf regex101


(?<!\\)"(?:(?<!\\)\\"|[^"])*(?<![^\\]\\)" scheint

+1

Es fehlgeschlagen für '" foo \\ "==" bar "' [regex101] (https://regex101.com/r/nX3hE9/3) – jcubic

+0

Der feste Regex wäre '(? jcubic

+0

@jcubic es ist noch nicht perfekt: [regex101] (https: // regex101 .com/r/nX3hE9/4) Danke für die vielen Dank –

Verwandte Themen