suchen nach nichtvorhanden sein

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

  • suchen nach nichtvorhanden sein

    Hallo Community,
    hoffe ihr könnt mir mal wieder vom schlauch helfen, stehe nämlich erneut drauf.

    Problem ist das ich einen String habe dem ein attribut fehlt.

    PHP-Code:
    $string "<a href='a.html' name='a'>a</a><a href='b.html' name='b' >b</a><a href='c.html' >c</a><a href='d.html' name='d' >d</a> "
    wie zu sehen ist fehlt bei dem dritten Verweis das attribut "name".

    ich möchte nun diesen String nach name durchsuchen und bei nichtvorhanden sein hinzufügen.

    versuche anscheinend wiedereinmal an der falschen stelle zu suchen
    habe schon mit preg_match_all eine Funktion gefunden die mir annähernd rankommt. Kriege jedoch nicht den Verweis raus der eben das Attribut nicht beinhaltet.

    Könnt ihr mir da mal wieder unter die Arme greifen?

    Vielen Dank im Vorraus.

    Postaria

  • #2
    habe schon mit preg_match_all eine Funktion gefunden
    und wie sieht die aus?

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Wenn der String immer so aussieht, kannst du auch mit explode(), strpos(), implode() usw. arbeiten. Geht oft besser von der Hand.

      Kommentar


      • #4
        Re: suchen nach nichtvorhanden sein

        Original geschrieben von Postaria
        Hallo Community,
        hoffe ihr könnt mir mal wieder vom schlauch helfen, stehe nämlich erneut drauf.

        Problem ist das ich einen String habe dem ein attribut fehlt.

        PHP-Code:
        $string "<a href='a.html' name='a'>a</a><a href='b.html' name='b' >b</a><a href='c.html' >c</a><a href='d.html' name='d' >d</a> "
        wie zu sehen ist fehlt bei dem dritten Verweis das attribut "name".

        ich möchte nun diesen String nach name durchsuchen und bei nichtvorhanden sein hinzufügen.
        PHP-Code:
        $src "<a href='a.html' name='a'>a</a><a href='b.html' name='b' >b</a>".
               
        "<a href='c.html' >c</a><a href='d.html' name='d' >d</a> ";

        // Suchmuster
        $pcre '/(\<a\s+href=\'([a-z]+)\.html\')(\s+name=\'\\2\')?(\s*\>\\2\<\/a\>)/s';

        function 
        callback_0815($hits) {
          
        debug::writefln('$hits: %s'$hits);
          if (
        '' !== $hits[3]) {
            return 
        $hits[0];
          }
          return 
        "$hits[1] name='$hits[2]'$hits[4]";
        }
        $callback 'callback_0815';

        /* pcre testen
        debug_writeflnh(
            '$hits: %s', 
            preg_match_all($pcre, $src, $hits, PREG_SET_ORDER) ? $hits : FALSE
        );
        //*/

        $dst preg_replace_callback($pcre$callback$src);

        // Ergebnis des Ersetzen-Vorgangs ausgeben:
        debug_writeflnh('$dst: %s'$dst); 
        Da du nicht näher angegeben hast, aus welchen Zeichen sich die Name-Attribute zusammensetzen, hab ich pauschal '/[a-z]+/' angenommen. Außerdem habe ich den Wert aus dem href-Attribut geholt. Möglicherweise wolltest du den Wert aus der Beschreibung (zwischen <a...> und </a>). In dem Fall wird es etwas komplizierter. Man könnte mit "conditional subpatterns" spielen, aber dir würde ich eher empfehlen, die Callback-Funktion entsprechend anzupassen. Die Backreferences ('\\1') müssten dann aber auch geändert werden.

        --

        Nachtrag:

        Wie immer den Quellcode bitte aus der Zitatansicht kopieren, sonst gehen einige Backslashes flöten.

        Und die Funktion debug_writeflnh() zur Kontrollausgabe kann man notfalls durch irgendwas Selbstgebasteltes mit var_dump() ersetzen.
        Zuletzt geändert von fireweasel; 23.04.2009, 22:20.
        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

        Kommentar


        • #5
          danke fireweasel
          deine Funktion kommt etwas zu spät....
          Ist aber mein Fehler.
          ich habe es nun so gelöst das ich jeden einzelnen <a ></a> in ein Array packe, daraufhin jedes array element nach name durchsuche und bei nichtvorhandensein name hinzufüge und dann zu einem string wieder zusammenbastel.

          klingt ziemlich kompliziert war aber auf die schnelle nicht anders zu lösen.

          Danke an euch alle
          hmm eventuell kann ich die Funktion aber dennoch gebrauchen fireweasel....

          Kommentar

          Lädt...
          X