PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wieder einmal regex



Beatkiller
28-11-2005, 18:11
Hallöle,

ich hoffe, es gibt dafür überhaupt eine Lösung. Ich möchte mit preg_replace() bestimmte Schlüsselwörter durch andere ersetzen, aber nur, wenn sie nicht innerhalb von einem <form></form>-Tag stehen. Geht das überhaupt?

Ich hab es schon mit Negation versucht, komme damit aber nicht weiter.


$pattern = "!/\<form(.*)>(?.*)<\/form>/is";


Damit scheine ich auf dem Holzweg zu sein, wie mir scheint. Ich danke für einen Tipp, der mich weiter bringt.

Beatkiller
28-11-2005, 18:33
Ich habe nun doch eine Lösung gefunden, ich mach einfach einen Save des Forms, lass alles ersetzen und setze anschließend das form wieder zurück:



preg_match("/\<form(.*)form\>/is", $str, $backsave);
if(is_array($backsave) && count($backsave) > 0)
$form_code = $backsave[0];
else
$form_code = "";


/* Hier die Ersetzungen */

if($form_code != "")
$str = preg_replace("/\<form(.*)form\>/is", $form_code, $str);


Ich weiß, das ist nicht sehr elegant, dafür aber schnell gelöst. Wenn jemand dennoch etwas besseres weiß, ich bin für alles offen.

Romanday
30-11-2005, 13:08
preg_replace() bestimmte Schlüsselwörter durch andere ersetzen, aber nur, wenn sie nicht innerhalb von einem <form></form>-Tag stehen. Geht das überhaupt?

Damit scheine ich auf dem Holzweg zu sein, wie mir scheint. Ich danke für einen Tipp, der mich weiter bringt.

Geht schon, da mußt Du mit Rückreferenzierungen arbeiten.
Ist aber eine ziemliche Fummelei, die ganzen Ausnahmen zu bedenken.
Einfacher ist es alle Zeilen die nicht <form></form> enthalten zu
extrahieren, und dann die Ersetzung vorzunehmen. Nachteil:
Dein Script wird eventuell etwas langsamer.

nEox
30-11-2005, 13:59
Hi,

um mit regular expressions zu experimentieren und schnell zu testen gibt es ein Programm namens Regex Coach, zu finden auf:

http://www.weitz.de/regex-coach/

Gruß,
nEox

Beatkiller
06-12-2005, 14:16
Danke für die Tipps.

@Romanday: Genauso hab ich es auch gemacht. Die Geschwindigkeit ist kaum spürbar langsamer.