SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 28.06.2004, 02:15:39
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
preg_replace und verschachtelte Befehle

In einem Forum gibt es die Möglichkeit eigene Befehle einzugeben. So kann ein User zum Beispiel [zitat]Text[/zitat] eingeben. Alles was nun zwischen [zitat] und [/zitat] steht, wird nun formatiert und eingrückt dargestellt.
Dies habe ich folgendermaßen gemacht:
PHP-Code:
$regex='$([zitat])((?s).+)([/zitat])$i'
$ersatz='<blockquote>$2</blockquote>';
echo 
preg_replace($regex$ersatz$text); 
Das funktioniert soweit auch ganz gut. Ein Problem tritt aber auf, wenn nun ein Benutzer einen Beitrag zitiert, in dem bereits ein Zitat vorhanden ist, was dann bei der Eingabe in etwa so aussieht:

[zitat]text den ich zitiere[zitat]eingebettetes zitat[/zitat] weiterer text, den ich zitiere[/zitat]

Dann werden nur das erste [zitat] und das letzte [/zitat] umgewandelt. Die beiden dazwischen jedoch nicht.

Meine Frage ist nun, wie man auch das eingebettete Zitat entsprechend darstellen lassen kann.

Geändert von xabbuh (28.06.2004 um 23:38:34 Uhr)
Mit Zitat antworten
  #2  
Alt 28.06.2004, 19:57:54
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
Keiner eine Idee?
Mit Zitat antworten
  #3  
Alt 28.06.2004, 21:24:44
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
1.: regex sind lahm, und nur dort zu benutzen, wenns gar nicht anders geht. du könntest also auch [zitat] durch <blockquote> mit str_replace ersetzen.

aber warums bei dir nicht funktioniert, keine ahnung, mein parser schaut so aus (für bilder):

PHP-Code:
$string preg_replace"/[bild](.+)[/bild]/UiS" "<img src="$1" />" $string ); //bild wird ersetzt; form: [bild]_SRC_[/bild] 
Mit Zitat antworten
  #4  
Alt 28.06.2004, 21:27:59
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
also, mal angeschaut:

[ musst du escapen. warum hast du 100000 runde klammern gesetzt? die sind nicht nötig.

2.:

((?s).+)

was ist das?

es soll etwas zitiert werden. das sind zeichen jeglicher art. davon mindestens eins:

.+

als modifier auch noch U da auch mal 2 zitate vorkommen können; den modifier S brauchst du nicht, da im zitat leerzeichen vorkommen können, in einer adressierung eines bildes (wie bei mir) nicht.

?s

ich schätze du meintest den modifier s, der sollte dann auch als solcher gekennzeichnet werden, also eher

?s

macht aber m.e. trotzdem wenig sinn an der stelle.

edit: auch die musst du hier im forum zwischen den [ php ] - tags escapen...
Mit Zitat antworten
  #5  
Alt 28.06.2004, 23:37:54
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
Zitat:
Original geschrieben von feuervogel
((?s).+)

was ist das?
Wie gesagt, in einem Zitat dürfen alle Zeichen vorkommen. Da der Punkt aber den Zeilenumbruch nihct enthält habe ich den Modifier s wie im Tutorial beschrieben auf den Punkt angewandt.

Zitat:

?s
Wieso auf diese Weise? Im Tutorial war immer von dieser Form die Rede: (?s) nach der öffnenden Klammer.

Zitat:
edit: auch die musst du hier im forum zwischen den [ php ] - tags escapen...
Hatte ich vergessen. Ist geändert.
Mit Zitat antworten
  #6  
Alt 29.06.2004, 00:30:39
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
ah, okay, sorry, regex müsste man eigentlich jeden tag üben, um fit zu bleiben...
Mit Zitat antworten
  #7  
Alt 29.06.2004, 00:54:52
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
Hab mich gerade erst reingearbeitet, vielleicht liegt es daran ;-) Mein Problem hat sich damit zwar trotzdem nicht gelöst, aber ich habe es dann jetzt doch mit Hilfe von str_replace() gemacht, obwohl ich das eigentlich vermeiden wollte, weil dann auch Tags umgewandelt werden, wenn das dazu passende schließende Element fehlt. Aber damit muss ich wohl leben.
Mit Zitat antworten
  #8  
Alt 29.06.2004, 02:01:40
tapferesschneid tapferesschneid ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 194
Schau Dir mal das Konstrukt

[zitat]((?![(/)?zitat])+|(?R))*[/zitat]

an. Das stimmt so aus dem Kopf garantiert jetzt nicht, aber wenn Du ein bißchen probierst und nochmal in der Doku schaust ... ;-)
Mit Zitat antworten
  #9  
Alt 29.06.2004, 02:13:22
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
wie schon oben angedeutet:

$string = preg_replace( "%[zitat](.+)[/zitat]%Uis" , "<blockquote>$1</blockquote>" , $string );

funktioniert. ist getestet.
Mit Zitat antworten
  #10  
Alt 29.06.2004, 09:43:30
tapferesschneid tapferesschneid ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 194
Häh? Ich dachte, eben nicht. Ein String wie

[zitat]text den ich zitiere[zitat]eingebettetes zitat[/zitat] weiterer text, den ich zitiere[/zitat]

wird dadurch nicht korrekt umgewandelt. Dafür brauchst Du o. g. (?R)-Rekursion ...
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:32:19 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt