PHP: Reguläre Ausdrücke - Brauche Hilfe



  • Hi,

    schau dir ma (?!blubber) und (?<!blubber) an.

    /lala(?!blubber)/ passt beispielsweise auf eine Zeichenkette, die "lala" enthält, aber kein "blubber" danach. /(?<!blubber)lala/ auf eine, die "lala" enthält, aber kein "blubber" davor.

    cu
    Arskane



  • Eion Look-Behind bringt in diesem Fall aber nichts, weil er nicht weiß, was vorher steht.



  • Hi,

    natürlich bringt ihm das was, er kann doch damit sicherstellen, dass sich kein Anführungszeichen oder Hochkomma vor und nach dem Kommentar befindet. Das ist doch genau das, was er wollte oder?

    cu
    Arskane



  • Ja, aber nur wenn der Text davor fest ist:

    //"auskommentierter String" -> würde gehen.
    //irgendetwasdazwischen"auskommentierter String" -> geht nicht.

    Das Problem ist, dass Kommentare und Strings sich gegenseitig ausheben.

    Vielleicht würde eher soetwas funtkionieren:
    ^[\"']?(//.)$



  • Genau das ist das Problem Dasd... könntest du mir bitte freundlicher weise noch kurz erläutern, worauf deine Zeichenkette "^[\"']?(//.)$" zutrifft?



  • Kurze Anmerkung: Hab die Reihenfolge jetzt geändert -> Strings werden zuerst gecaptured. Jetzt soll quasi ein String nur dann eingefärbt werden, wenn er nicht in einem Kommentar liegt. Bisher habe ich folgende Ausdrücke für Strings verwendet:

    ~(&quot;.*?(?<!(?<!\\\\)\\\\)&quot;)~
    ~(\'.*?(?<!(?<!\\\\)\\\\)\')~
    


  • Hi!

    Hier meine Idee zu dem ganzen, kann alles was du brauchst außer dem letzten Fall (Geöffneter String mit Kommentar folgend, das packt diese regex noch nicht):

    ~((["']).*?\2 *)(//.*|/\*.*?\*/)?~s
    

    Die Referenz $1 gibt dir dann den String und die Referenz $3 den Kommentar. $3 ist leer, wenn kein Kommentar gefunden wurde.

    Ich hoffe damit ist dir geholfen?



  • Vielleicht kann mir ja ein Admin von dieser Website hier weiterhelfen, ich mein... wie hat c-plusplus.net das den hingekriegt:

    "String"
    //Kommentar "String"
    /* Kommentar
    
    "String */ ... ... ..."
    
    */
    

    So sollte es bei mir auch sein...



  • OK... vielleicht auch nicht, ich sehe grad, dass sie das auch nicht hinbekommen haben... naja, muss ich mir wohl etwas einfallen lassen... 😉



  • Ach nein... ok, das ist ok so, weil Kommentare werden zuerst ausgewertet bzw. entfernt vom Compiler, somit ist das dannja kein gültiger String. OK, danke erstmal, ich werde nachher mal deinen Ausdruck testen.


Anmelden zum Antworten