Zeilenumbruch in regulären Ausfrücken



  • Hallo zusammnen. Ich habe mich ein wenig mit Regulären ausdrücken beschäftigt und habe dazu eine Frage: Wie kann ich bestimmen, dass ein Zeilenumbruch erlaubt ist?

    Ich habs mal so versucht, funktioniert aber selbsverständlich nicht, wie möchte es auch anders sein! 😡

    $expr = "^sct[\n ]*\([\n ]*(\"[_[:alnum:]]+\"[\n ]*,[\n ]*){2}\"[_\.\/[:alnum:]]+\"[\n ]*\)[\\n ]*\{[\n ]*";
    

    Damit sollte folgendes akzeptiert werden:
    sct("gen","Allgemein","img/gen.jpg"){

    Aber folgendes ebenfalls:
    sct ( "gen" , "Allgemein"
    , "img/gen.jpg" ) {

    Folendes allerdings nicht:
    sct("gen","Allge
    mein","img/gen.jpg"){

    Es funktioniert auch alles bis auf das verflixte \n, denn sobald ich nun ein \n im source-code habe wird das ganze nicht mehr geparst!



  • Ishildur schrieb:

    $expr = "^sct[\n ]*\([\n ]*(\"[_[:alnum:]]+\"[\n ]*,[\n ]*){2}\"[_\.\/[:alnum:]]+\"[\n ]*\)[[b]\[/b]n ]*\{[\n ]*";
    

    Ist das nur ein Vertipper im Forums-Post?! 😕



  • Ja, das ist nur ein Vertipper, im Source - Code hab ichs richtig!



  • Bist du sicher, dass du nur ein \n und kein \r\n o.ä. in deinem Source-Code hast?! 🙂



  • Absolut, ich habs aber nun mit \s ersetzt und das funktioniert in diesem Fall auch! Nun habe ich allerdings ein neues Problem und zwar dass er & und ; nicht erkennt mit folgendem Term [\w&;]! Habe ich da was falsch gemacht?



  • Ich habs glaub ich hinbekommen. Aber irgendwie erscheint mir das Ganze recht umständlich. Ich bin total unerfahren mit regulären Ausdrücken und frage mich daher, ob man es nicht viel eleganter lösen könnte. Ich poste mal, was ich so hingebastelt habe:

    if(!preg_match("^(sct[\s]*\([\s]*(\"[\w &;]+\"[\s]*,[\s]*){2}\"[\.\/\w &;]+\"[\s]*\)[\s]*\{[\s]*(pge[\s]*\([\s]*(\"[\w &;]+\"[\s]*,[\s]*){2}\"[\.\/\w &;]+\"[\s]*\)[\s]*;[\s]*)*[\s]*\}[\s]*)+$",$content)) return false;
    

    Diese Programmzeile soll den Inhalt meiner struckturdatei verifizieren:
    sct("gen","Allgemein","img/gen.jpg"){
    pge("home","Home","home.php");
    pge("about","Über uns","about.php");
    pge("gallery","Fotogallerie","agm_gallery.php");
    pge("guestbook","Gästebuch","guestbook.php");
    pge("contact","Kontakt","contact.php");
    pge("links","Links","links.php");
    }
    sct("apa","Ferienwohnung","img/apa.jpg"){
    pge("description","Beschreibung","description.php");
    pge("gallery","Fotogallerie","apa_gallery.php");
    pge("walk","Wanderrouten","walk.php");
    pge("trekking","Eseltrekking","trekking.php");
    pge("financial","Finanzielles","financial.php");
    }
    sct("dog","Hunde","img/dog.jpg"){
    pge("breed","Hundezucht","dog_breed.php");
    pge("dogs","Rüden","dogs.php");
    pge("bitches","Hündinnen","bitches.php");
    pge("litter","Würfe","litter.php");
    pge("gallery","Fotogallerie","dog_gallery.php");
    }
    sct("shp","Milchschafe","img/dog.jpg"){
    pge("kind","Rasse","kind.php");
    pge("breed","Zucht","shp_breed.php");
    pge("milk","Milch","milk.php");
    pge("gallery","Fotogallerie","shp_gallery.php");
    }
    sct("hrb","Produkte","img/hrb.jpg"){
    pge("herb","Bergkräuter","home.php");
    pge("meat","Lammfleisch","meat.php");
    }

    Es dürfen überall lücken und zeilenumbrüche sein, ausser in den strings zwischen 2 Anführungszeichen.
    Eigentlich C - Synthax

    Vielleicht schaut ihr euch das ja mal an und habt Verbesserungsvorschläge?
    Gruss Ishildur


Log in to reply