PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nochn Regex Problem ^^


dagod
02.04.2007, 00:10
$template = preg_replace('#<head>(.+)<\/head>#','',$template);

Ich möchte einfach alles zwischen den head tags löschen -.-
wieso geht das nicht?
vielen dank für eure Hilfe.


Alamar
02.04.2007, 03:19
Bei deinem Replace-Teil fehlt ein ".
Btw. finde ich ja "#" als delimiter schrecklich.

BrudaSwen
02.04.2007, 09:59
Bei deinem Replace-Teil fehlt ein ".
Sofern Du Dich auf den Zweiten Parameter beziehst, hast Du unrecht.
dagod benutzt einfach nur ZWEI einfache Anführungszeichen.

Das Problem dürfte sein, dass nicht über mehrere Zeilen gesucht wird.
Sofern ich es noch richtig weiss, sollte das mit der Option "m" zu lösen sein:
$template = preg_replace('#<head>.+</head>#ms','<head></head>',$template);

Edit: Die Option s muss auch noch hinzu, damit der Punkt auch Zeilenumbrüche matchet. Und wie kill4h` erwähnt hat, kann man sich die Klammern auch sparen.

kill4h`
02.04.2007, 10:29
Ich find die Raute als Delimiter herrlich. Wenn du nen Slash nimmst, musst alle dummen Slashes escapen, ist doch bescheuert. Außerdem ist der Gartenzaun so groß, den kann man nicht übersehen :D

Zu dem Problem:
Wie BrudaSwen schon gepostet hat sollte es passen. Du musst den Slash nicht escapen, außer du hast ihn z.B. als Delimiter gewählt....
Daneben glaube ich musst du das Zeug zwischen den Tags nicht capturen, da es ja eh alles ersetzt wird und du nicht rückreferenzierst.

dagod
02.04.2007, 12:15
Ah, danke, geht...

Wo kann ich diese Parameter nachschauen? Würde mich dafür interessieren :/

Alamar
02.04.2007, 12:18
Dann soll er sagen, dass er ein multiline match will.
Hast recht er hat Single Quotes verwendet - ist halt im Normalfall recht unnötig deswegen hab ich gar nicht weiter geschaut.

kill4h`: preg steht für "perl compatible regular expressions" und bei perl
wird nun mal der "/" als delimiter verwendet.

dagod:
www.php.net such nach "modifier"

kill4h`
02.04.2007, 12:19
Welche Parameter? :)

EDIT:
@Alamar:
Das ist mir bewusst, aber auch in Perl kannst du den Delimiter frei wählen. Manche haben sogar besondere Bedeutungen, wie z.B. '?'... Google es mal nach und du wirst erstaunt sein ;)

BrudaSwen
02.04.2007, 12:42
Dann soll er sagen, dass er ein multiline match will.
Sofern man mit der Materie nicht so vertraut ist, kommt man aber in der Regel nicht auf die Idee, dass es daran liegen könnte.

Hast recht er hat Single Quotes verwendet - ist halt im Normalfall recht unnötig deswegen hab ich gar nicht weiter geschaut.
Unnötig? Warum sind Single Quotes unnötig. Für normale Strings sehe ich diese immer noch als bessere Alternative an.


dagod:Suchmuster-Modifikatoren (http://de2.php.net/manual/de/reference.pcre.pattern.modifiers.php)

Alamar
02.04.2007, 17:29
Welche Parameter? :)

EDIT:
@Alamar:
Das ist mir bewusst, aber auch in Perl kannst du den Delimiter frei wählen. Manche haben sogar besondere Bedeutungen, wie z.B. '?'... Google es mal nach und du wirst erstaunt sein ;)

Man kann den delimiter nicht anders wählen.
? ist ein quantifier.

butterkeks
02.04.2007, 18:20
alamar:
sicher kann man das

print 'ok' if '/blah/' =~ m#/b..h/#; # ok

kill4h`
02.04.2007, 23:32
Man kann den delimiter nicht anders wählen.
? ist ein quantifier.Ich zitiere dann einfach mal mein liebes Kamel Buch, deutsche Ausgabe, 3. Auflage, S. 156:

"Der Operator m// durchsucht den String im Skalar AUSDRUCK nach MUSTER. Werden / oder ? als Trennzeichen verwendet, ist das einleitende m optional. ? und ' besitzen als Trennzeichen eine besondere Bedeutung: Das erste sorgt für ein einmaliges Matching; das zweite unterdrückt die Variablen-Interpolation und die (später noch beschriebenen) Übersetzungs-Escapes (\U und Co.)."

Wollt ich nur mal nebenbei angemerkt haben....