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 = "#&#40;.*&#41;&#40;<textarea>.+</textarea>&#41;&#40;.*&#41;#is";

  preg_match_all&#40;$scan, $deintext, $m, PREG_SET_ORDER&#41;;

    foreach&#40;$m as $mm&#41;
	 &#123;
$suchen = array&#40;"$mm&#91;1&#93;", "$mm&#91;3&#93;"&#41;;
$ersetzung = array&#40;"$vortextarea", "$nachtextarea"&#41;;
$deinneuertext = str_replace&#40;$suchen, $ersetzung, $deintext&#41;;

// wenn du es mit nichts ersetzen willst brauchst du nur $mm&#91;2&#93; ausgeben und ersparst dir den replace.
&#125;

LG Kylee

Verfasst: 06.12.2007, 15:29
von wuschba
Danke!