kostenloser Webspace werbefrei: lima-city


preg_match() expects parameter 2 to be string

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    Hallo, diese Fehlermeldung [preg_match() expects parameter 2 to be string]
    bekomme ich immer bei diesem Code:

    $var1 = preg_match('Heute:\<\/span\>\<\/td\>\<td nowrap\>\<span id="aktuell"\><\b\>.* \<\/b\>\<\/span\>\<\/td\>/is', $datei);

    ich will mit dem Code bezwecken, dass in $datei das herausgesucht wird, was anstelle von .* steht.
    Dies soll dann in $var1 gespeichert werden.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. n****x

    Patient: »Herr Doktor, immer wenn ich so mache, dann tut's weh
    Arzt: »Na, dann machen sie doch nicht so!«

    *SCNR*

    Die Fehlermeldung macht dich in PHP-Englisch darauf aufmerksam, dass das, was du preg_match() übergibst nicht so ist, wie es preg_match() gerne hätte.

    Speziell der Parameter 2 soll ein STRING sein, kein ARRAY, OBJECT oder sonst irgendwas Wunderliches. Zur Probe kannst du dir ja mal $datei anzeigen lassen:

    var_dump($datei);

    Irgendwo in deinem Script hast du $datei einen Wert zugewiesen, der nicht vom Typ STRING ist. Da liegt die Ursache.

    Wenn du dieses Problem beseitigt hast, könnte die nächste Fehlermeldung lauern:
    Dein PCRE beginnt nicht mit einem »/«.

    ich will mit dem Code bezwecken, dass in $datei das herausgesucht wird, was anstelle von .* steht.
    Dies soll dann in $var1 gespeichert werden.


    http://de.php.net/manual/de/function.preg-match.php

    Wie du dort nachlesen kannst, gibt preg_match() die Anzahl der gefundenen Teil-Strings zurück. Du musst dein Script also etwas umbauen:

    //
    if( !preg_match('/Heute:\<\/span\>\<\/td\>\<td nowrap\>\<span id='aktuell'\><\b\>(.*)\<\/b\>\<\/span\>\<\/td\>/is', $datei, $treffer)) {
      echo 'Nischt gefunden!';
      $var1 = '';
    };
    $var1 = $treffer[1];



    Beitrag geaendert: 17.12.2006 16:23:06 von notfux
  4. Autor dieses Themas

    speedtouch92

    Kostenloser Webspace von speedtouch92

    speedtouch92 hat kostenlosen Webspace.

    ok,
    nur irgendwie findet er nun nie etwas, auch wenn es vorhanden ist.
    Kann es sein, dass es falsch escaped ist?

    Und was heißt

    /is am Ende?
  5. n****x

    Könnte sein ...
    Du kannst deinen PCRE hier online testen:
    http://regexp-evaluator.de/evaluator/

    Hier die Auswertung:
    http://regexp-evaluator.de/evaluator/eb301ce4e9508b96bb6ccf88c7994915/#ergebnis

    Möglicherweise enthält dein zu durchsuchender Text eben gerade nicht die passenden Teilzeichenketten.

    In solchen Fällen teste ich den PCRE Stück für Stück, von links beginnend in kleinen Abschnitten durch.
    Also zuerst "'/Heute:",
    dann "'/Heute:\<\/span\>",
    dann "'/Heute:\<\/span\>\<\/td\>"
    usw. bis ich die Stelle gefunden habe, wo es "hakt". Dann passe ich den PCRE entsprechend an und weiter gehts, bis der ganze PCRE durch ist, und "matcht".

    /i heißt case insensitive -- also Wurscht, ob Groß- oder Kleinbuchstaben;
    /s heißt, dass der PCRE über Zeilengrenzen hinweg sucht. So ist der Punkt "." auch gültig für Zeilenumbruchzeichen.

    http://de.php.net/manual/de/reference.pcre.pattern.modifiers.php
    http://regexp-evaluator.de/tutorial/modifier/#dotall
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!