preg_replace
Science
- php
Hallo @ all,
Ich würde gerne zwischen den Pre Tags die zusätslichen Html-Tags für zeilenumbrüche (<br />) herauslöschen, was ich wie folgt angegangen bin:
$search = array( "/((<pre>[^</pre>]*)|<br />)/e" );
$replace = array( '"\2"=="\1"? "\1":" "' );
$text = preg_replace ($search, $replace, $text);
Das funktioniert allerdings noch nicht so ganz, könnt ihr mir weiterhelfen?
mfg Science
Hallo Science,
$search = array( "/((<pre>[^</pre>]*)|<br />)/e" );
Das funktioniert allerdings noch nicht so ganz, könnt ihr mir weiterhelfen?
[^ab] heißt alles außer a ODER b, jedoch nicht alles außer ab. Daher:
$search = array("/((<pre>.*?</pre>)|<br />)/e");
Das ? aus .*? ist hier erklärt: http://www.dclp-faq.de/q/q-regexp-gierig.html Das /-Zeichen musst Du "escapen", (d.h. ein \ voranstellen) weil Du das als Trennzeichen für Deinen regulären Ausdruck verwendet hast.
Viele Grüße,
Christian
Hallo Christian,
Danke, jetzt funktioniert es - fast.
Es war wohl mein anfänglicher Fehler, doch eigentlich wollte ich string $s
$search = array("/((<pre>.*?</pre>)|$s)/e");
innerhalb von <pre></pre> ersetsen, damit es keine doppelten zeilenumbrüche gibt...
Was muss ich dafür ändern?
mit freundlichen grüßen und hoffnung auf baldige Antwort: Science
Hallo Science,
Danke, jetzt funktioniert es - fast.
Es war wohl mein anfänglicher Fehler, doch eigentlich wollte ich string $s
$search = array("/((<pre>.*?</pre>)|$s)/e");
innerhalb von <pre></pre> ersetsen, damit es keine doppelten zeilenumbrüche gibt...
Was muss ich dafür ändern?
Was steht in $s?
Viele Grüße,
Christian
Hallo Christian,
In $s steht <br />.
mfg Science
Hallo Science,
In $s steht <br />.
Na dann ist ja klar - / ist das Trennzeichen für Deinen Ausdruck und deswegen muss es maskiert werden. Entweder Du sorgst dafür, dass in $s <br /> steht, oder Du änderst das Trennzeichen für Deinen Ausdruck.
Viele Grüße,
Christian
Christian
Nein, das meine ich nicht, soweit funktioniert es schon, doch die entsprechende Funktion ersetzt natürlich außerhalb von <pre></pre> die Zeilenumbrüche, ich würde sie allerdings doch lieber innerhalb ersetzten, da diese dort sonst doppelt stehen.
Bis jetzt habe ich:
$s in $t durch $r ersetzen, außerhalb von $1 und $2:
preg_replace("/(($1.*?$2)|$s)/e", '"\2"=="\1"? "\1":"$r"', $t);
Ich weiß allerdings nicht genau, wie ich die Zeile(n) umschreiben muss, damit die Zeilenumbrüche innerhalb der beiden Tags ersetst werden!?
mgf Science
Hallo Science,
Nein, das meine ich nicht, soweit funktioniert es schon, doch die entsprechende Funktion ersetzt natürlich außerhalb von <pre></pre> die Zeilenumbrüche, ich würde sie allerdings doch lieber innerhalb ersetzten, da diese dort sonst doppelt stehen.
Ach so meinst Du das... Hmmmm.
Ich weiß allerdings nicht genau, wie ich die Zeile(n) umschreiben muss, damit die Zeilenumbrüche innerhalb der beiden Tags ersetst werden!?
Dann musst Du einen völlig anderen Ansatz wählen:
$start = '<pre>';
$ende = '</pre>';
$s = '<br />';
$r = '';
$text2 = preg_replace ("/$start.*?$ende/ie", "str_replace ('$s', '$r', '$0')", $text1);
(oder innerhalb auch preg_replace, wenn es komplexer wird)
Viele Grüße,
Christian
Hallo Christian,
Danke für die mühe, jetzt funktioniert alles.
mfg Science