Jan Entzminger: Wörter filtern die nicht in einem Link sind;regexp

Hi. Ich will in einem Volltext alle vordefinierten Wörter durch den Text Fred ist doof ersetzen. Dies soll aber nur passieren wenn die gesuchten Wörten nicht zwichen einem Link, also <a und a> stehen. Hab folgenden Regexp verwenden wollen. Klappt aber leider nicht. Kann mir jemand weiterhelfen. Danke.

$search_pattern='/[^<][^aA][^.*]\b'.$glossary_word.'\b[^.*][^aA][^>]/';
$replace_pattern='Fred ist doof';
$html='Hier steht der Volltext in dem gesucht werden soll';
$html = preg_replace ($search_pattern, $replace_patterm, $html, 1);

Gruß Jan Entzminger

  1. Hi,

    Hab folgenden Regexp verwenden wollen. Klappt aber leider nicht.

    die Komplexität Deines Problems übersteigt die Möglichkeiten von Mustern. Parse den String.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. Guten Tag,

    Hi. Ich will in einem Volltext alle vordefinierten Wörter durch den Text Fred ist doof ersetzen.
    Dies soll aber nur passieren wenn die gesuchten Wörten nicht zwichen einem Link, also <a und a> stehen.

    Wenn ich's recht verstanden habe, könntest Du's vielleicht mal
    so probieren:

    <?
    $htm = "qörgl baloba, rintintin
            nargcks <a href='http://www.zuppa_pavese.htm'>zuppa_pavese</a> globsch
            zuppa_pavese zwittscher <a href='http://www.wunz.txt'>wunz</a> uiouiouio
            lölö wunzwunz müppl
            baloba qwerqwer rintintin ölöl
            <a href='http://www.rintintin.htm'>rintintin</a>
            rintintin
           ";

    $w = '(zuppa_pavese|wunz|baloba|rintintin|o)';

    $r = 'Fred ist doof';

    $a = '</[aA]>';

    print '<pre>';
    print $htm."\n";
    print preg_replace("/$w(?!$a|[^<>]+(>|$a))/", $r, $htm);
    print '</pre>';
    ?>

    gruß

    werndt

    1. Nachtrag

      Ich habe die Möglichkeit nicht bedacht, daß innerhalb eines tags
      Attributen Worte aus der Wortliste zugewiesen sein können, zB:

      <tt id='baloba' onclick='rintintin()'>baloba</tt>

      Folgende regex ersetzt auch das:

      "/$w(?![^<>]*(>(?=[^<]+$a)|$a))/"

      gruß

      werndt