preg_replace( ... alle worte finden außer denen welche in h1 stehen --- tips?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • preg_replace( ... alle worte finden außer denen welche in h1 stehen --- tips?

    Wie findet man alle Worte, die nicht in h1 stehen? Ich haber verschiedenen probiert auch das. Es klappt jedoch nicht.

    $words = "/[^<h1.*?]\\b(" . trim($word) . ")\\b/";
    preg_replace($words, $replaced, $string);

  • #2
    Das tut fast das was es soll nur werden alle Überberschriften gefunden. Es sollen jedoch nur h1 Überschriften gefunden werden.

    $words = "/[^<h1.*?>]\b(" . trim($word) . ")\b[^<\/h1.+?]/";

    Weiß jemand was da noch geändert werden muss?

    Kommentar


    • #3
      Was sind denn Worte, die nicht in h1 stehen? Meinst du schlicht "außerhalb von H1-Tags" oder eher "alles innerhalb Hx-Tags mit x!=1"?

      Worte, die nicht in h1 stehen - also "außerhalb", stehen
      a) vor dem ersten <h1>,
      b) zwischen </h1> und dem nächsten <h1> oder
      c) nach dem letzten </h1>

      Um es übersichtlicher zu machen, definieren wir uns kurz mal
      PHP-Code:
      $h1_open '<h1[^>]*>';
      $h1_close '<\/h1[^>]*>'
      Nun können wir (Teil-)Ausdrücke für die obigen Fälle konstruieren:
      PHP-Code:
      $a '^(.*)'.$h1_open;
      $b $h1_close.'(.*)'.$h1_open;
      $c $h1_close.'(.*)$'
      und zusammensetzen:
      PHP-Code:
      $regex '/'.$a.'|'.$b.'|'.$c.'/'
      Das funktioniert natürlich am besten case-insensitive, sowieso nur ungreedy und leider auch nur bei validem HTML. Wenn man kein valides HTML hat, ist es vielleicht geschickter, erstmal mit preg_replace() alle Überschriften zu entfernen.

      Alle Überschriften Hx außer H1 ist einfacher:
      PHP-Code:
      $regex '/<h[23456][^>]*>(.*)<\/h[23456][^>]*>/'
      Wieder mit /Ui, und wieder nur für valides HTML.

      Mit Backreferences kann man die Ausdrücke noch verbessern. Das überlasse ich dir.

      Übrigens frißt dieses Forum gern Backslashes. Klick auf zitieren, wenn du die sehen willst.

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        [B]Was sind denn Worte, die nicht in h1 stehen? Meinst du schlicht "außerhalb von H1-Tags" oder eher "alles innerhalb Hx-Tags mit x!=1"?
        ...
        Deine Antwort würde ich sagen, ist die Beste des Jahres. Es sollte hier eine Bewertung der Antworten geben. So ausführlich. Herzlichen Dank. Ich sehe, Du hast Dich intensiv mit dieser Problematik beschäftigt und kannst Dein Wissen vermitteln. Davon leben Foren.

        Ich habe die halbe Nacht nach einer Lösung gesucht und das diese gefunden:
        PHP-Code:
        $words "/(?<!h([2-3]>))(?<!b>)\\b(" trim($word) . ")\\b/i";

         
        $content preg_replace($words$replace$content); 


        Es werden alle worte ersetzt, welche nicht voher mit einem h2/3 oder b tag beginnen. Das scheint bisher gut zu funktionierren. Die Funktion ist so etwas wie (wenn a)(dann wenn b)(dann wenn c). Gefunden habe ich diese Infos hier
        Zuletzt geändert von janein; 04.12.2007, 13:03.

        Kommentar

        Lädt...
        X