tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
399
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    kamp kamp ist offline Mitglied
    Registriert seit
    Mar 2007
    Ort
    Österreich
    Beiträge
    10
    Hallo!

    Ich habe ein Verzeichnis, in dem Dateien mit folgendem Beispielinhalt liegen:

    PHP-Code:
    <?php
    $titel
    ="Titel";
    $beschreibung="Beispiel";
    $keywords="key1,key2,key3";
    ?>
    Nun versuch ich mich an einer Suchfunktion, mit preg_match() die derweilen so aussieht:

    PHP-Code:
            // Titel ermitteln
            
    preg_match("=$titel\=\"(.*)\";=siU"$str$title);

            
    // Beschreibung ermitteln
            
    preg_match("=$beschreibung\=\"(.*)\";=siU"$str$descr);

            
    // Keywords
            
    preg_match("=$keywords\=\"(.*)\";=siU"$str$keyw); 
    Wenn ich jetzt die suche starte, wird offensichtlich nur im Titel durchsucht. Nicht aber in Beschreibung oder in den Keywords. was ist da mein Fehler?

    wenn ich mir $title[1].$descr[1].$keyw[1] augeben lasse sieht das in dem Beispiel so aus:

    TitelTitelTitel
    Geändert von kamp (20.06.11 um 15:37 Uhr)
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Das $ am Anfang des Pattern bedeutet Textanfang. Wenn du das $ als Zeichen verwenden willst, dann musst du es escapen.
    \$

    PHP-Code:
           preg_match("=\$titel\=\"(.*)\";=siU"$str$title); 
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    kamp kamp ist offline Mitglied
    Registriert seit
    Mar 2007
    Ort
    Österreich
    Beiträge
    10
    Stimmt, da hast nu natürlich recht. Hab das $ nun in jeder Zeile escaped, aber wenn ich nun $title[1].$descr[1].$keyw[1] ausgeben lassen, habe ich gar keinen Wert mehr?

    und wenn ich mir die kompletten arrays ausgeben lasse siehts so aus:
    Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => ) Array ( [0] => [1] => )

    weil ich direkt nach den preg_match folgenden code habe:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
            if(!isset($title[1])) {
                $title = array('','');
            }
            if(!isset($descr[1])) {
                $descr = array('','');
            }
            if(!isset($keyw[1])) {
                $keyw = array('','');
            }
    Geändert von kamp (20.06.11 um 16:02 Uhr)
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Es war doppelt falsch!
    Du umgibst dein Pattern mit doppeltem Anführungszeichen. Darin hast du $titel. Dies wertet PHP als Variable mit dem Namen $titel.
    PHP-Code:
    $pattern "=$titel\=\"(.*)\";=siU";
    var_dump($pattern);
    // ergibt '=\="(.*)";=siU'
    // da $titel durch den Inhalt der nicht initialisierten Variable $titel ersetzt wird 
    Nun haben wir ein \ davor gesetzt
    PHP interpretiert '\$titel' nicht mehr als Variable, sondern als String '$titel'
    PHP-Code:
    $pattern "=\$titel\=\"(.*)\";=siU";
    var_dump($pattern);
    //ergibt 0=$titel\="(.*)";=siU0' 
    Jetzt haben wir zwar $titel im pattern, jedoch wird das $ am Anfang des Patterns vom RegExp für Anfang der Textes intepretiert
    PHP-Code:
    //entweder
    $pattern "=\\\$titel\=\"(.*)\";=siU";
    //oder (ist eher mein Favorit)
    $pattern '=\$titel\="(.*)";=siU'
    Mein Tipp. Patterns immer in einfachen Anführungszeichen schreiben, damit diese nicht durch PHP geparst werden. Ausser natürlich, man stellt das Pattern dynamisch zusammen.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    kamp kamp ist offline Mitglied
    Registriert seit
    Mar 2007
    Ort
    Österreich
    Beiträge
    10
    herzlichen dank, so funktionierts
     

  6. #6
    Avatar von xCondoRx
    xCondoRx xCondoRx ist offline Mitglied Brokat
    Registriert seit
    Apr 2004
    Beiträge
    399
    Was genau hast du eigentlich vor? Wenn das eine PHP Datei ist, kannst du die richtige doch einfach einbinden und die Werte auslesen. Oder nimm sonst einfach eine INI Datei.
     

Ähnliche Themen

  1. Regulärer Ausdruck
    Von messmar im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 25.01.08, 13:36
  2. Regulärer Ausdruck
    Von ddhb im Forum PHP
    Antworten: 3
    Letzter Beitrag: 12.02.07, 17:34
  3. Regulärer ausdruck
    Von liquidbeats im Forum PHP
    Antworten: 8
    Letzter Beitrag: 09.09.05, 08:26
  4. Regulärer Ausdruck
    Von Benzol im Forum .NET Archiv
    Antworten: 3
    Letzter Beitrag: 28.01.05, 11:58
  5. Regulärer Ausdruck
    Von Fluctuator im Forum PHP
    Antworten: 9
    Letzter Beitrag: 17.03.04, 13:38

Stichworte