| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

27-01-2011, 13:44
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
Probleme mit der preg_replace
Hi
ich benötige mal eure Hilfe. Ich bastel an einem bbcode parser. Der Parser soll erkennen, daß ein :wave: zb ein Smilie ist. Das klappt mich diesem code hier auch ganz gut:
PHP-Code:
$Help = "<img class=\"smilie\" src=\"http://www.mydomain.de/smilies/$1.gif\">";
$input = preg_replace('!:([A-Za-z0-9_]+?):!', $Help, $input);
Damit werden alle Smilies angezeigt, aber wenn ich Uhrzeiten im Text habe:
"blabal 2011-01-27 10:30:23", dann versucht er die :30: auch als Smilie zu ersetzen. Wie kann ich das verhindern? Eigentlich müste ich ja nur sicherstellen, daß nach dem 2. : ein leerzeichen kommt bzw kein weiterer Buchstabe oder zahl, nur dann sollte es ein Smilie sein, oder? Bei einem Smilie dürfte danach ja nur leerzeichen. Tabs, Satzeichen oder Zeilenende kommen
Wie müßte dann meine RegExpression aussehen?
Danke im vorraus
Geändert von grka (27-01-2011 um 13:48 Uhr)
|

27-01-2011, 13:48
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Verwende strtr() statt preg_replace().
|

27-01-2011, 13:49
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
was macht strstr()? Hat das die gleiche Expression?
|

27-01-2011, 13:51
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
Hab mal nachgesehen, daß kann ich ja nur alles vor oder nach einem Zeichen ausgeben, in wiefern kann mir das bei meinem Problem helfen?!
|

27-01-2011, 13:51
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
PHP-Code:
$smilies = array( ':wave:' => '<img src="http://example.org/wave.gif" alt=":wave:" />', ':-)' => '<img src="http://example.org/laugh.gif" alt=":-)" />', ':-(' => '<img src="http://example.org/sad.gif" alt=":-(" />' );
$text = strtr($text, $smilies);
|

27-01-2011, 13:54
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
Das würde aber bedeuten, daß ich jedes einzelne Smilie auflisten müsste. Genau das möchte ich ja umgehen und etwas universelles bauen. der bbcode pro Smilie entspricht dem Dateinamen ohne .gif. dh ein smilie :wave: heißt wave.gif in dem Verzeichnis. Also möchte ich eine Expression mit der ich das : for und nach dem wave wegbekomme und er einen html Befehl drumherumbaut und das.gif dran hängt. Mit dem obigen code funktioniert das auch schon hervorragend, nur bei Uhrzeitangaben halt nicht. Ich möchte das die obige Expression nur dann funktioniert wenn nach dem 2. : kein buchstabe oder Zahl steht
|

27-01-2011, 13:57
|
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 2.328
|
|
Zitat:
Zitat von grka
Das würde aber bedeuten, daß ich jedes einzelne Smilie auflisten müsste.
|
Nein, musst du nicht. Das ist das tolle an Programmiersprachen: Man kann dem Computer sagen, dass er die Arbeit für einen machen soll.
Du kannst dir ja ein Array an Smilies automatisiert aufbauen.
Außerdem kann so nicht passieren, dass auf Bilder verlinkt wird, die gar nicht existieren. Könnte ja jeder irgendwas schreiben, dass dann durch ein nicht existierendes Bild ersetzt wird. zB. :dashierhabichmireinfachsoausgedacht:
|

27-01-2011, 14:05
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
Normalerweise schreiben unsere user ja nicht den bbcode selber sondern clicken die smilies an. Ich dachte mir halt, das es einfacher ist diese obige Expression zu erweitern, nachdem motto nach dem 2. : soll kein Buchstabe oder Zahl kommen. Das sollte doch eine kleinigkeit sein, ich bin nur nicht so fit in den Expressions.
hatte das hier probiert:
PHP-Code:
$input = preg_replace('!:([A-Za-z0-9_]+?):([^A-Za-z0-9])!', $Help, $input);
Da wird zwar die Uhrzeit richtig angezeigt, aber die Smilies nicht mehr umgewandelt
|

27-01-2011, 16:19
|
|
skippy100
Registrierter Benutzer
|
|
Registriert seit: Jan 2011
Beiträge: 3
|
|
Warum ersetzt du die Doppelpunkte nicht durch eckige Klammern?
[wave]
Dann dürfte das Uhrzeitproblem gelöst sein.
Gruß
Frank
|

27-01-2011, 16:24
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
Dann hab ich aber das Problem wenn einer was in eckigen Klammern schreibt. gibts denn keinen regulären ausdruck mit dem man sagen kann, daß nach dem 2. Doppelpunkt kein buchstabe oder zahl kommen darf?!
|

27-01-2011, 19:21
|
|
grka
Registrierter Benutzer
|
|
Registriert seit: Mar 2007
Beiträge: 25
|
|
Hab eine Lösung bekommen:
PHP-Code:
$input = preg_replace('!:([A-Za-z0-9_]+?)(:$)!', $Help, $input);
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|