PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : preg_match() & Co.


c4
10.04.2003, 18:37:11
Moin,

ich wage mich mal in das Gebiet der regulären Ausdrücke und hab mit folgendem ein Problem:
$head=preg_match("/$*#entry#/i",$jt,$head);

$jt enthält puren HTML-Text.

Wie ich mir das dachte:
Er soll mir den Bereich (*) vom Anfang ($), bis #entry# in $head speichern. Soweit richtig gedacht?
Ich erhalte aber diese Fehlermeldung: Warning: Compilation failed: nothing to repeat at offset 1 in datei.php on line 29
Zeile 29 ist die mit preg_match

Danke.


Edit 1: Fehlermeldung weg: hab nun da stehen. Aber ich wollte doch, dass er alles von Anfang bis #entry# in $head reinklatscht. Dem ist nicht wirklich so. Oder ich hab das erstellte Array noch nicht kapiert.

Edit 2: $ mit ^ ersetzt. :) Problem von Edit 1 besteht aber noch...

Edit 3: Hab's aufgegeben.

MiH
11.04.2003, 09:24:40
$head=preg_match("|^(.*)#entry#|ism",$jt,$head);
$head[1] sollte dann das gewünschte beinhalten.

c4
11.04.2003, 09:33:44
Das funzt:
preg_match("/^(.*)#entry#/ism",$jt,$head);
$head=$head[0];

Was soll eigentlich der Punkt dort? Der steht doch nur für ein beliebiges Zeichen, ähnlich dem Stern. Lässt man den Punkt aber weg, so kommt dieser compilation-Fehler. Klär' mich mal bitte auf.

MiH
11.04.2003, 10:42:17
. = findet alle zeichen incl. newline
* = 0 oder mehr zeichen
somit bedeutet also ".*" alle zeichen bis zur endbegrenzung.

* ist falsch und erwartet eben noch, was er finden soll!

ich hatte mit absicht | anstatt / genommen da in html tags auch / vorkommen. somit hast du eventuell schon mal eine fehlerquelle in deinem regexp. du müsstest dann / escape mit / und hast so in deinem regexp viele berge und täler. man sollte als begrenzung ein zeichen wählen, was so wenig wie möglich vorkommt, wie eben | oder °,#

http://www.perldoc.com/perl5.8.0/pod/perlre.html