php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.04.2006, 20:58  
Erfahrener Benutzer
 
Registriert seit: 29.12.2004
Beiträge: 149
Blank
Standard BBCode mit eregi_replace(); ändert nur letztes Vorkommen

Ich bin dabei ein BBCode für mein Programm zu erstellen. Dafür benutze ich eregi_replace();.
Damit mir die Text Daten um den BBCode herum nicht verloren gehen habe ich folgendes gemacht:
PHP-Code:
$TEXT eregi_replace("(.*)\{b}(.*)\{/b}(.*)","\\1[b]\\2[/b]\\3",$TEXT); 
Leider liest er das nur einmal aus. d.h. wenn ich zweimal den BBCode für Fett ({b}{/b}) benutze wird nur das letzte Vorkommen umgewandelt.
Was mich wundert, da der eigendlich den Text von vorne durch kämmt.

Weis jemand wieso der nur das letzte fett macht ob man das auch so stellen kann das man alle Vorkommen fett werden und kein Text verloren geht.

Der Code ist nur ein beispiel! Da auch [img] oder [url] sachen drin vorkommen werde ich nicht auf str_replace(); umsteigen.

PS: Hab nur {} verwendet weil bei [] wieder der BBCode vom Forum reingesprungen wäre.
__________________
Cya, Blank
Blank ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.04.2006, 22:23  
Gast
 
Beiträge: n/a
Standard

Verwende die schnelleren und zukunftssicheren preg_*()-Funktionen.

Mit diesen kannst Du mit dem Modifier U die Gier umkehren, sodass der
String wie gewollt umgesetzt werden sollte:
PHP-Code:
<?php
  $TEXT 
preg_replace("#(.*)\{b}(.*)\{/b}(.*)#Ui","\\1[b]\\2[/b]\\3"$TEXT);
?>
 
Alt 12.04.2006, 11:56  
Erfahrener Benutzer
 
Registriert seit: 29.12.2004
Beiträge: 149
Blank
Standard

Vielen Danke! So gehts auch:
PHP-Code:
<?php
$TEXT 
preg_replace("#\{b}(.*)\{/b}#Ui","[b]\\1[/b]",$TEXT);
?>
Geht diese Funktion vielleicht nicht über mehrere Zeilen? Da immer wenn ich mehrere Zeilen dazwischen abstand halte setzt diese Raussuchfunktion nicht ein. Gibts was dagegen?
__________________
Cya, Blank
Blank ist offline  
Alt 12.04.2006, 12:31  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Standardmäßig findet der Punkt keine Zeilenumbrüche. Dafür kannst du aber den Modifier s hinzufügen:
PHP-Code:
<?php
    $TEXT 
preg_replace("#\{b}(.*)\{/b}#sUi","[b]\\1[/b]",$TEXT); 
?>
xabbuh ist offline  
Alt 12.04.2006, 12:40  
Erfahrener Benutzer
 
Registriert seit: 29.12.2004
Beiträge: 149
Blank
Standard

Danke! Ich glaube es gab auf php.net mal so eine Liste mit Modifiers. Ich find die bloss nich mehr. Ich hab schon alles versucht google usw.
__________________
Cya, Blank
Blank ist offline  
Alt 12.04.2006, 12:49  
Erfahrener Benutzer
 
Registriert seit: 23.08.2007
Beiträge: 1.510
M3g4Star befindet sich auf einem aufstrebenden Ast
Standard

kennst du wikipedia ???

:wink:

*Reguläre Ausdrücke auf Wikipedia*
M3g4Star ist offline  
Alt 12.04.2006, 14:58  
Erfahrener Benutzer
 
Registriert seit: 13.11.2005
Beiträge: 2.583
xabbuh
Standard

Oder im Manual: http://www.php.net/manual/en/referen....modifiers.php
xabbuh ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
preg_replace letztes vorkommen, eregi_replace, str_replace letztes vorkommen, php letztes vorkommen, php preg_replace erstes vorkommen, php replace letztes auftreten, php replace letztes vorkommen, php preg_replace letztes vorkommen, php preg_replace zwischenräume bei datum uhrzeit, php str_replace nur letztes vorkommen, php replace letzte vorkommen, preg_replace erstes und letztes vorkommen php, eregi_replace letztes, eregi_replace nur das letzte, g_text = eregi_replace, $g_text = eregi_replace, php str replace letztes vorkommen, php preg_replace \letztes vorkommen\

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:33 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.