Hallo zusammen!
Hallo
Folgendes Problem:
Ich habe bei einem Projekt einen Datei-Upload. Die hochgeladene Datei (im Prinzip eine reine Textdatei) soll nun nach Kommentaren durchsucht werden, und diese sollen rausfliegen.Verwenden möchte ich gerne preg_replace().
Leider kapiere ich RegExp immer noch in dem Maße, dass ich mir hier das erforderliche Suchmuster selber erstellen könnte.
Folgende Syntax kennzeichnet Kommentare:
1.) -- gefolgt von beliebigen Zeichen bis Zeilenende
2.) --[[ gefolgt von beliebigen Zeichen bis ]]Bis hierhin hatte ich es mit folgendem Ausdruck versucht: $luafile = preg_replace('/((-){2}.*[^\n]|--[[.* [^]]{2})/', '', $luafile);
[^\n] = alles ausser eine newline
[\n] = eine newline
warum nicht
'/--.*?\n|--[[.*?]]/'
Aber die 3. Möglichkeit stellt mich vor ein für mich unlösbares Problem:
3.) --[==[ gefolgt von beliebigen Zeichen bis ]==]
wobei es auf die Anzahl der Gleichheitszeichen ankommt. Also Ende ist erst genau da, wo die Zeichenfolge mit exakt derselben Anzahl an Gleichheitszeichen kommt. Dazwischen können auch erneut andere Zeichenfolgen --[[/ --[====[ vorkommen, die dann aber keine Rolle spielen.
Kein Problem. Wir verwenden $1 und \1
'/--[(=+)[.*?]\1]/'
und nun zusammengesetzt
'/--.*?\n|--[[.*?]]|--[(=+)[.*?]\1]/'
und etwas ausfaktoriert
'/--(?:.*?\n|[[.*?]]|[(=+)[.*?]\1])/'
ich kann mir [[ als [=?[ auffassen und den mittleren Ausdruck sparen:
'/--(?:.*?\n|[(=*)[.*?]\1])/'
Nun aber noch ein Problem mit der Reihenfolge
'/--(?:[(=*)[.*?]\1]|.*?\n)/'
Testen musst du selbst.
mfg Beat