preg_match() expects parameter 2 to be string
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anstelle
arzt
beitrag
datei
doktor
ergebnis
fehlermeldung
fllen
hinweg
kleinen abschnitten
manual
mglicherweise
parameter
patient
pattern
span
tutorial
ursache
weh
zurck
-
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. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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? -
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage