Helmuth: preg_replace -

Hallo liebe Leute,
ich habe folgendes Problem. Ich habe ein preg_replace mit mehreren Werten, die ersetzt werden sollen. In meinem Beispiel nehme ich nur zwei Wörter, es können aber wesentlich mehr sein.

Und hier das Beispiel:

<?
$text = "In der Sonne wächst die Sonnenblume am besten.";
echo preg_replace( '/(.*)(sonne|sonnenblume)(.*)/isUm', '\1<b>\2</b>\3', $text );
?>

Es wird leider nur "sonne" in bold ausgegeben AUCH bei "Sonnenblume" ebenefalls nur "sonne".

Wenn ich es umdrehe funkt es einwandfrei:
echo preg_replace( '/(.*)(sonnenblume|sonne)(.*)/isUm', '\1<b>\2</b>\3', $text );

Da ich aber keinen Einfluss auf die Reihenfolhe habe weiss ich nicht weiter!?

Was mache ich falsch?
Helmuth

  1. Hallo, Helmuth!

    Wenn Du exakt nach Sonnenblume oder Sonne suchen willst, muss vor und nach dem Wort mindestens ein nicht alphanumerisches Zeichen kommen, also
    '/(\W)(Wort1|Wort2|Wort3|...)(\W)/isUM'

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo LX, das ist schon fast was ich brauche.

      $text = "In der Sonne wächst die Sonnenblume am besten. Sonnen macht die Haut schön braun.";
      echo preg_replace( '/(\W)(sonne|sonnenblume)(\W)/isUm', '\1<b>\2</b>\3', $text ); ?>

      Jetzt fehlt nur noch, dass "[b lang=html]Sonne[/b]n" auch gefettet wird.

      Helmuth

      1. Das geht so nicht. Entweder ganze Wörter oder Du musst eine Funktion schreiben, welche Dir die Wortliste entsprechend sortiert.

        Gruß, LX

        --
        X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: Unusual
        X-Please-Search-Archive-First: Absolutely Yes
        1. Das ist ja das Problem. Eine Sortierung ist nicht ohne weiteres möglich. Es geht um eine Blacklist, die ich über einen Text laufen lassen muss.

          Hast du einen Ansatz für mich!?

          Gruß, Helmuth

          1. Hallo,

            Das ist ja das Problem. Eine Sortierung ist nicht ohne weiteres möglich. Es geht um eine Blacklist, die ich über einen Text laufen lassen muss.

            warum kann diese Blacklist nicht sortiert werden?

            Freundliche Grüße

            Vinzenz

            1. Ich kann schon sortieren, bringt mich aber leider nicht weiter.

              Beispiel:
              $text = "In der Sonne wächst die Sonnenblume am besten. Sonnen macht die Haut schön braun. Sonnenhut macht sonne Freude!";
              echo preg_replace( '/(\W)(sonne|sonnenblume)(\W)/isUm', '\1<b>\2</b>\3', $text ); ?>

              Der Text sollte hinterher so aussehen:
              In der SONNE wächst die SONNENBLUME am besten. SONNEn macht die Haut schön braun. SONNEnhut macht SONNE Freude!

              Da ist die Sortierung egal.

              Gruß
              Helmuth

              1. Hi,

                Ich kann schon sortieren, bringt mich aber leider nicht weiter.

                dann sortierst Du falsch.

                Der Text sollte hinterher so aussehen:
                In der SONNE wächst die SONNENBLUME am besten. SONNEn macht die Haut schön braun. SONNEnhut macht SONNE Freude!

                Da ist die Sortierung egal.

                Nein, ist sie nicht.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
              2. Hallo,

                Beispiel:
                $text = "In der Sonne wächst die Sonnenblume am besten. Sonnen macht die Haut schön braun. Sonnenhut macht sonne Freude!";

                Der Text sollte hinterher so aussehen:
                In der SONNE wächst die SONNENBLUME am besten. SONNEn macht die Haut schön braun. SONNEnhut macht SONNE Freude!

                das sieht für mich so aus, als wären Wortgrenzen *nicht* relevant, z.B. lese ich daraus, dass aus

                Höhensonneneinfluss

                HöhenSONNEneinfluss

                werden sollte. Infolgedessen ist die Voraussetzung für Wortgrenzen nicht gegeben - also tritt der oder-Fall aus diesem Beitrag von LX ein.

                Freundliche Grüße

                Vinzenz

  2. Hi,

    In meinem Beispiel nehme ich nur zwei Wörter, es können aber wesentlich mehr sein.

    es sind aber in jedem Fall Wörter, richtig?

    Da ich aber keinen Einfluss auf die Reihenfolhe habe weiss ich nicht weiter!?

    Das Pattern für Wortgrenze lautet \b.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes