Rexexp

DJ_Freeman

Well-known member
5 Juni 2006
92
3
Moin Leute, also vor langer Zeit hab ich mal irgendwo diesen Code gefunden, um alles zwischen |anfang| und |ende| aus $string in $matches zu packen. Da dachte ich mir halt, irgendwann brauchste das bestimmt mal und packst es einfach mal in ne *.txt

PHP:
preg_match_all("/\|anfang\|(.*)\|ende\|/",$string,$matches);

Nun ist es soweit, ich brauche es wirklich ;) Allerdings funktioniert es für meine Anforderungen nicht so ganz. Ich habe diesen Code

PHP:
preg_match_all("/<span style=\"font-style: italic\">(.*)</span>/",$buffer,$matches);

der mir diesen Fehler beschert:

Code:
Warning: Unknown modifier 'p' in /home/www/web12/html/namen/a/test.php on line 7

Könnt ihr mich aufklären, worin der Fehler liegt?

MfG Sascha
 
Jup, kann ich ;)

Das erste Zeichen des Regulären Ausdruckes ist ein Begrenzerzeichen, dass innerhalb des Ausdruckes nicht (bzw. nur maskiert) vorkommen darf. Bei dir kommt es aber im schließenden Span-Tag vor.

Lösung: Anderes Begrenzerzeichen verwenden (z.B. #)
PHP:
preg_match_all('#<span style="font-style: italic">(.*)</span>#', $buffer, $matches);
Btw: Sicher, dass du preg_match_all brauchst und nicht preg_match ausreichen würde? (Unterschiede siehe Manual)

Gruß,
MrToiz
 
Alternativlösung: Den Delimiter ("Begrenzungszeichen") escapen:
PHP:
preg_match_all('/<span style="font-style: italic">(.*)<\/span>/', $buffer, $matches);

Mit verlaub: sehr hässlich.

Hab ja auch geschrieben, dass man ihn maskiert verwenden kann, aber in diesem Fall stiftet das imho nur Verwirrung.
 
Jo, ich find MrToiz version auch besser. Danke

Achso, müssen die " gar nicht maskiert werden?

Sascha