Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Tabs am Anfang einer Zeile durch Leerzeichen ersetzen (https://www.delphipraxis.net/69065-%5Bphp%5D-tabs-am-anfang-einer-zeile-durch-leerzeichen-ersetzen.html)

faux 9. Mai 2006 19:21


[PHP] Tabs am Anfang einer Zeile durch Leerzeichen ersetzen
 
Hallo!

Ich habe folgendes Problem: Ich erzeuge mittels einem PHP-Skript ein HTML-Output, welches mit Tabs formatiert ist. Wahlweise soll der Benutzer meines Skripts auch die Formatierungstabs in Leerzeichen umwandeln können. Das habe ich mit folgendem Code gelöst:

Code:
[color=#000080][i]$content[/i][/color] = preg_replace([color=#008000]"[\t]"[/color], str_repeat([color=#008000]' '[/color], [color=#000080][i]$space[/i][/color]), [color=#000080][i]$content[/i][/color])
Jedoch werden mit diesem Code auch Tabs innerhalb der HTML-Tags ersetzt, würde ich mal sagen, ich will aber nur die Tabs ersetzen, welche am Anfang der Zeile stehen. Also á la @^[\t]@m. Jedoch wird bei diesem Code nur das 1. Tab ersetzt, da das 2. Tab ja nichtmehr an den Zeilenanfang grenzt. Mit @^[\t]*@m werden zwar alle Tabs ersetzt, jedoch weiß ich nicht wieviele ursprünglich da waren, also wird der Abstand, welcher vorher durch mehrere Tabs formatiert wurde, jetzt nur noch durch die anzahl der Leerzeichen formatiert, welche einem Tab entsprechen.
Wie kann ich das Problem lösen?

Grüße
Faux

P.S. Ich habe keines der Beispiele getestet; es sind nur "Gedankenexperimente", also es kann sein, dass ich mich irre.

Mystic 9. Mai 2006 19:27

Re: [PHP] Tabs am Anfang einer Zeile durch Leerzeichen erset
 
Vielleicht so?

Code:
/^\t*?\t([^\t]+.*)/
Ersetzen durch:

Code:
str_repeat(' ', $space) + '\1'
edit: Funktioniert nicht.

KingIR 9. Mai 2006 19:38

Re: [PHP] Tabs am Anfang einer Zeile durch Leerzeichen erset
 
mom, erstmal richtig lesen, dann antworten *korrigier* sorry :wall:

So, jetzt aber:

Code:
$repl_func = create_function('$match', 'return str_repeat(\' \', ' . (int)$space . ' * strlen($match[0]));');

$new = $content;
do
{
  $prev = $new;
  $new = preg_replace_callback('/^\t+/m', $repl_func, $prev);
}
while($new != $prev);

$content = $new;

unset($new, $prev, $repl_func);


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz