Reguläre ausdrücke. Leerzeichen

js-mueller

Erfahrenes Mitglied
HI. Ich bräuchte einen regulären ausdruch welcher mir folgendes schafft.

ich möchte aus diesen zeilen

<fieldset><legend>welt.php:</legend><code style="font-style: italic; font-size: 12px;"><br />
&lt;?php<br />
echo &quot;HALLO WELT!&quot;;<br />
?&gt;<br />
</code></fieldset>

folgende macht

<fieldset><legend>welt.php:</legend><code style="font-style: italic; font-size: 12px;"><br />
&lt;?php<br />
&nbsp;&nbsp;echo &quot;HALLO WELT!&quot;;<br />
?&gt;<br />
</code></fieldset>

Halt das er mir die einrückungen in leerzeichen wiedergibt. Weil sonst werden diese ja nicht sichtbar. Kann mir dabei vieleicht wer helfen. Ich bin leider nicht so fit in regulären ausdrücken. Das einzige was ich hinbekomme wäre alle leerzeichen in dem block zu ersetzen. Aber das soll ja net sein.
 
Ich sehe da nur ein Leerzeichen vor dem "echo"....da sollte str_replace() ausreichen.

Falls du diesen Code mit der Einrückung darstellen willst, benutze doch den HTML-Tag <pre>
 
Naja es ist ja nicht immer nur eine zeile code. Und es isnd 4 leerzeichen vor dem echo. Also es soll nbsp sein, doch das wird ja hier gleich umgewandelt und net dargestellt.
Pre geht leider nicht, weil ich durch eine php funktion welche ich nicht beinfleussen kann hinter jede zeile ein <br /> gesetzt wird wegen des Zeilenumbruchs. So Pre macht mir da ja nochma nen zeilenumbruch rein weil es ja praktisch <br />\n am ende der Zeile ist...
Also muss ich pre da schonmal ausschließen
 
Das einfachste wäre dann, wenn du auf diese <br /> am Zeilenende verzichtest....in <pre> werden auch die Zeilenumbrüche \n dargestellt.

Wenn du das nicht willst, dann so:
Code:
$txt=preg_replace("/^([ ]+)/me","str_replace(' ','&amp;nbsp;','\\1')",$txt);


Das ersetzt alle Leerzeichen am Zeilenbeginn.
 
Geht das auch noch so erweitert das es nur in so einem block passiert?
Weil der text der noch drum herum steht soll ja nicht verändert werden.
 
Sicher geht das....ich werd aber jetzt bestimmt nicht das Rad neu erfinden und ellenlange Codezeilen posten;)

Entweder du schaust dir RegExp mal selbst näher an....
oder du benutzt die gegebenen Möglichkeiten, diese sind mit dem <pre>-Tag oder den PHP-Funktionen highlight_string() bzw. highlight_file() für deinen Zweck überaus üppig vorhanden.
 
Naja es gibt halt ein problem. Der block wird ja auch dirch einen preg_replace erstellet.
vorher heisst der[ code ]blub[/ code ]
So da ich dann ja mit \\1 den inhlat von code in das fieldset packe kann ich da ja keine php funktionen mehr über laufen lassen oder?

Deswegen suchte ich nach einer möglichkeit das fildset mit nem weiteren preg_replace zu bearbeiten
 
Klar kannst du innerhalb von preg_replace() weitere Funktionen über eine Zeichenkette (bspw. das blub) Laufen lassen....dafür ist der Optionsschalter "e"....der bewirkt, dass PHP-Code im Replacement ausgeführt wird....

in meinem Beispiel von oben wird dies ja auch getan.....innerhalb von preg_replace() wird nohcmals per str_replace() ersetzt.
 
Zurück