preg_replace für Smilies

  • Hallo,

    da RegEx mein größtes Defizit sind brauche ich mal Hilfe:

    Ich will in Postings Smilies durch grafiken ersetzen

    Standart wäre: str_replace(":)", "<img src... />", $text);

    ich wills aber so haben, dass das nur geht wenn davor und dahinter kein zeichen ist, also zB :)) soll nicht ersetzt werden .. oder >:) auch nicht.

    str_replace(" :) ", " <img src... /> ", $text); ist aber auch blöd, weil wenn das smilie am ende steht wirds auch nicht ersetzt.

    wie löse ich das am besten ?

    Lg

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • Bin zwar noch lange davon entfernt ein RegEx-Guru zu werden,
    aber so als Vorschlag (für den von dir verwendeten Smiley):

    Code
    $regex = '(^[.]|\s+?):\)';
    $replace = '\1<img ... />';


    Getestet mit:

    Code
    >:)
    :)
     :)

    Offtopic:
    hab mich etwas gewundert, dass ich jemanden mit so 'vielen' Posts noch nie gesehen hab - du darfst ruhig auch mal Helfen und nicht nur fragen ;P

  • Tjah, probier etwas rum - hab dir eine Vorlage mit einem Beispiel gegeben.

    Dürftest doch auch schonmal mitgekriegt haben, dass das hier kein 'mach mir mal' Forum ist.
    Helfen gern -- dir alles vorkauen -- nein danke.

  • Ich hab von Regex und deren Syntax nichtmal irgendwie Ahnung, da kann ich schlecht was rumprobieren ! Abgesehen davon hab ich auch keine Zeit dafür, ich frag net grundlos in nem Hilfeforum wegen was nach wenn ichs könnte, dürfte ja einleuchtend sein

    Ach Gott, gut dann frag ich woanders nach, passt schon, danke

    PHP
    if(isset($this) || !isset($this)){ // that's the question...
  • *sigh*
    Im ersten Beispiel wolltest du ein

    Code
    :)

    durch etwas ersetzen

    Ich hab dir als patern

    Code
    (^[.]|\s+?):\)

    gegeben.
    Wo ist da drin der smiley? Zur Info: \ leitet beim Regex entweder eine Spezielle Regel/Funktion oder escaped eine bereits bestehende. ')' hat beim Regex eine Bedeutung, deshalb ist es escaped.
    Sö, wenn du jetzt immer noch nicht imstande bist etwas selbst zu basteln, such dir n neues Hobby :/

    /P.S. ich helfe auch nicht Grundlos hier im Forum mit. Ich erwarte von den leuten, denen ich helfe, dass sie es danach auch selbst auf die Reihe kriegen (oder es zumindest selbst versuchen, wenn man wirklich nichtmehr weiter kommt - kann man ja nochmal fragen...). Dafür ist Hilfe da, ansonsten erwarte ich einen Auftrag ;P

    3 Mal editiert, zuletzt von Grevas (19. März 2011 um 23:28)

  • Mich interessieren keine Regex, ich brauche sie nie und deswegen werd ich mich damit nie auseinandersetzen, geschweigen denn die Syntax lernen.
    Nach überfliegen deiner Antwort hab ich gemerkt, dass da keine Lösung steht also hab ich mir nicht die Mühe gemacht es zu lesen - war also unnötig

    Ich hätte genau eine Zeile Code gebraucht das kann ja wohl nicht zu viel verlangt sein ?!
    Ich hab die Antwort auf das ganze jetzt woanders herbekommen, wo nicht wegen einer lächerlichen Zeile Code herumgealbert wird :roll:

    Thread Closed ...

    PHP
    if(isset($this) || !isset($this)){ // that's the question...

    Einmal editiert, zuletzt von Teron Gerofied (19. März 2011 um 23:55)

  • Er hat dir eine sehr ausführliche Antwort gegeben mit sehr klarem Hinweis, die menschlichen Fähigkeiten zum Pattern-Matching sollte da reichen, daraus das Herz-Smiley zu machen. Musst eben im regulären Ausdrück das :\) durch ein <3 ersetzen, da hast du die Lösung. Reguläre Ausdrücke sind im übrigen eine sehr praktische Sache, in vielen Scripts, die du schnell mal hinschreiben möchtest, sind sie sehr hilfreich, ebenso werden sie von Texteditoren unterstützt zum Suchen/Ersetzen, für mich gelegentlich auch unverzichtbar, ebenso wie das Programm grep. Zu sagen, ohne würde man nicht weit kommen, ist wohl falsch, aber sie sind sehr hilfreich und begegnen einem immer wieder in fremdem Code.