PHP und RegEx: Teilen Sie eine Zeichenkette durch Kommas, die nicht in Klammern stehen (und auch verschachtelte Klammern)

7

Vor zwei Tagen fing ich an, an einem Code-Parser zu arbeiten, und ich stecke fest.

Wie kann ich eine Zeichenfolge durch Kommas teilen, die nicht in Klammern stehen? Lassen Sie mich Ihnen zeigen, was ich meine:

Ich habe diese Zeichenfolge parsen:

%Vor%

Ich möchte dieses Ergebnis erhalten:

%Vor%

aber stattdessen bekomme ich:

%Vor%

Wie kann ich das in PHP RegEx tun?

Vielen Dank im Voraus!

    
Cristian Toma 05.07.2009, 20:27
quelle

7 Antworten

10

Sie können das einfacher machen:

%Vor%

Aber es wäre besser, wenn Sie einen echten Parser verwenden. Vielleicht in etwa so:

%Vor%     
Gumbo 05.07.2009, 22:07
quelle
7

Hm ... OK bereits als beantwortet markiert, aber da Sie nach einer einfachen Lösung gefragt haben, werde ich trotzdem versuchen:

%Vor%

Ausgabe

%Vor%     
merkuro 05.07.2009 21:54
quelle
5

Sie können nicht direkt. Du brauchst mindestens Lookbridge mit variabler Breite, und zuletzt wusste ich, dass PHPs PCRE nur einen Lookback mit fester Breite hat.

Meine erste Empfehlung wäre, zuerst geklammerte Ausdrücke aus der Zeichenfolge zu extrahieren. Ich weiß jedoch nichts über Ihr tatsächliches Problem, also weiß ich nicht, ob das machbar ist.

    
chaos 05.07.2009 20:36
quelle
2

Ich kann mir keinen Weg vorstellen, es mit einer einzigen Regex zu machen, aber es ist ziemlich einfach, etwas zusammenzukratzen, das funktioniert:

%Vor%

Wenn Sie es so aufrufen:

%Vor%

Es gibt aus:

%Vor%     
Emil H 05.07.2009 20:53
quelle
2

ungeschickt, aber es macht den Job ...

%Vor%     
Dycey 05.07.2009 21:07
quelle
1

Ich befürchte, dass es sehr schwierig sein könnte, verschachtelte Klammern wie z      %Code% nur mit RegExp.

    
MyKey_ 05.07.2009 20:32
quelle
1

Ich finde, es ist erwähnenswert, dass Sie immer reguläre Ausdrücke vermeiden sollten, wenn es Ihnen möglich ist. Zu diesem Zweck sollten Sie wissen, dass Sie für PHP 5.3+ verwenden können str_getcsv () . Wenn Sie jedoch mit Dateien (oder Dateiströmen) arbeiten, z. B. CSV-Dateien, verwenden Sie die Funktion fgetcsv () könnte das sein, was Sie brauchen, und es ist seit PHP4 verfügbar.

Schließlich bin ich überrascht, dass niemand preg_split () , oder hat es nicht wie nötig funktioniert?

    
ken 06.07.2009 06:06
quelle

Tags und Links