Michael: preg_replace Problem

Hallo, nutze folgendes Suchmuster:

$suchmuster[$id] = "/([\s])".htmlconverter($word1)."([\s.,:?!)])/i";

und folgende Ersetzung

$string1 = "\1<acronym>ist dann unterstrichen</acronym><div>info zu wort</div>\2";

Durch \1 bzw. \2 wird ja normal das Zeichen was vor bzw. hinter dem Suchwort war wieder gesetzt.
Das klappt aber nicht bei mir.
Es geht nur wenn hinter dem Suchwort ein , . : usw. ist.
Bei "Forum ist" macht er mir "Forumist" draus.
Verstehe das nicht wenn es so steht "Forum, ist" macht er es richtig "Forum, ist".

  1. Lieber Michael,

    was genau macht die Funktion "htmlconverter($word1)"?

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Lieber Michael,

      was genau macht die Funktion "htmlconverter($word1)"?

      Liebe Grüße aus Ellwangen,

      Felix Riesterer.

      Die Funktion zeigt mir das Wort an.
      Also $word1 sind die Wörter nach dennen gesucht wird, das htmlconverter ist nur für Umlaute etc.

      1. Hallo Felix,

        Die Funktion zeigt mir das Wort an.
        Also $word1 sind die Wörter nach dennen gesucht wird, das htmlconverter ist nur für Umlaute etc.

        1. Vielleicht solltest du die Ausgab von htmlconverter() mit
        preg_quote() escapen. Denn es könnten sich darin Zeichen befinden, die preg_replace() "durcheinander bringen" könnten.

        2.

        ... nutze folgendes Suchmuster:
        $suchmuster[$id] = "/([\s])".htmlconverter($word1)."([\s.,:?!)])/i";

        Und das gilt auch für die Zeichen in der zweiten Klammer: Der Punkt und das Fragezeichen sind in PCRE Zeichen mit besonderer Bedeutung. Entwerte sie mit dem Backslash, sonst werden sie als was anderes erkannt, als gewünscht.

        Ich würde auch Reguläre Ausdrücke in PHP nicht in doppelte Hochkommas setzen, denn in dem Fall, kann es sein, das PHP die Inhalte dieser Zeichenketten "vorinterpretiert".

        Mal zusammengefasst:

          
        $suchmuster[$id] = '/([\s])'.preg_quote(htmlconverter($word1), '/').'([\s\.\,\:\?\!)])/i'  
        
        

        MffG
        EisFuX

        --
        ... Suchmaschinen-Blog ...
        1. echo $begrüßung;

          $suchmuster[$id] = "/([\s])".htmlconverter($word1)."([\s.,:?!)])/i";

          Und das gilt auch für die Zeichen in der zweiten Klammer: Der Punkt und das Fragezeichen sind in PCRE Zeichen mit besonderer Bedeutung.

          Ja, aber nur außerhalb der eckigen Klammern. Innerhalb der eckigen Klammern, auch character class genannt haben nur die Zeichen ^-] eine besondere Bedeutung. Siehe Handbuch-Kapitel Pattern Syntax im Abschnitt Meta-characters.

          echo "$verabschiedung $name";

          1. error_reporting(E_ALL);
            printf('Hallo %s,', $your_name);
            print <<<ENDOFMSG

            echo $begrüßung;

            $suchmuster[$id] = "/([\s])".htmlconverter($word1)."([\s.,:?!)])/i";

            Und das gilt auch für die Zeichen in der zweiten Klammer: Der Punkt und das Fragezeichen sind in PCRE Zeichen mit besonderer Bedeutung.

            Ja, aber nur außerhalb der eckigen Klammern. Innerhalb der eckigen Klammern, auch character class genannt haben nur die Zeichen ^-] eine besondere Bedeutung. Siehe Handbuch-Kapitel Pattern Syntax im Abschnitt Meta-characters.

            Ja, jetzt wo du's sagst, fällt's mir auch wieder ein ... ^///^
            Also liegt das Problem doch nur allein in der htmlconverter()-Funktion begraben.

            ENDOFMSG;
            printf('MffG %s', $my_name);
            exit();

            --
            ... Suchmaschinen-Blog ...