Seite 1 von 1
preg_replace: Alles ausserhalb ersetzen?
Verfasst: 05.12.2007, 16:37
von wuschba
Hallo. Ich habe eine einfache Ersetzung vorzunehmen, das geht auch gut:
$txt = preg_replace("Suchen/iU", "Ersetzen", $txt);
Nun möchte ich gerne alles ersetzt haben, bis auf alles, was in Textareas steht: Also alles, was innerhalb von <textarea> </textarea> steht, soll diesmal NICHT ersetzt werden.
Irgendwie habe ich überhaupt keinen Ansatzpunkt - habt Ihr ne Idee?
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 05.12.2007, 17:45
von Southmedia
Du hast einen String "abc <textarea> def </textarea> ghi". Diesen splittest du anhand von "<textarea>" und "</textarea>" mit explode(), schon kannst du auf das zwischen drin zugreifen. preg_replace ist hier nicht unbedingt der richtige Weg.
Verfasst: 05.12.2007, 21:20
von wuschba
Danke! Hm, nur wie explode ich das ganze denn anhand von <textarea> und </textarea>, um dann nur auf die Bereiche außerhalb zuzugreifen? Problem ist auch nicht, dass in dem Textarea ja noch styles usw. drin stehen können (also <textarea style="....").
Ich dachte halt, es gebe evtl. eine Lösung analog zu:
https://www.php-faq.de/q/q-regexp-ersetzen.html Ich habs nur nicht hinbekommen...
Verfasst: 05.12.2007, 22:01
von Southmedia
Okay, wenn das <textarea> nicht so klar abgegrenzt ist wird das ganze schon komplizierter. Vielleicht doch besser ein Regex der dann nach dem Schema aufgebaut ist:
(.*)<textarea(.*)>(.*)</textarea><(.*)
Nur um das so wirklich zum laufen zu kriegen bin ich darin nicht fit genug. Würde ich vermutlich auch ne Zeit lang brauchen...
Habe noch ne Idee: Erst explode anhand von "<textarea", dann alles bis nach dem nächsten ">" löschen und danach eben noch das explode mit "</textarea>". Um die Ecke gedacht, aber einfach.
Verfasst: 06.12.2007, 10:05
von Kylee
Code: Alles auswählen
$scan = "#(.*)(<textarea>.+</textarea>)(.*)#is";
preg_match_all($scan, $deintext, $m, PREG_SET_ORDER);
foreach($m as $mm)
{
$suchen = array("$mm[1]", "$mm[3]");
$ersetzung = array("$vortextarea", "$nachtextarea");
$deinneuertext = str_replace($suchen, $ersetzung, $deintext);
// wenn du es mit nichts ersetzen willst brauchst du nur $mm[2] ausgeben und ersparst dir den replace.
}
LG Kylee
Verfasst: 06.12.2007, 15:29
von wuschba
Danke!