regexp - bin ich heute zu blöde?

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

  • regexp - bin ich heute zu blöde?

    folgender code:
    PHP-Code:
    $result '<A name="bla">bla</A> oder <P>blubb</P> 
                  oder <A name="laber">laber</A><H1>laber</H1>
                  <B class="superfett">und noch etliches weitere</B>'
    ;
    preg_match_all ("/<(\w)[^>]*>(.+\w)<\/(\w)>/Um",$result$hitsPREG_SET_ORDER);
    echo 
    '<pre>';
    print_r($hits);
    echo 
    '</pre>'
    warum findet er alles (also jedes tag mit inhalt) bia auf <H1>laber</H1>?

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

  • #2
    wie wärs damit:

    PHP-Code:
    "|<[^>]+>(.*)</[^>]+>|U" 

    okay, beantwortet nich deine frage damit funktioniert es aber

    *edit*
    wo sagst du denn das du auch numerische werte nimmst?! H1?! A B
    Zuletzt geändert von Bugbuster; 21.02.2008, 21:11.
    tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
    documentation: php.net mysql.com framework.zend.com

    Die Nachtwache!

    Kommentar


    • #3
      wo sagst du denn das du auch numerische werte nimmst?! H1?! A B
      \w sucht nach einem Perl-"word". Das bedeutet nach Buchstaben, Ziffern oder dem Unterstrich
      PHP-Code:
      "|<[^>]+>(.*)</[^>]+>|U" 
      okay, beantwortet nich deine frage damit funktioniert es aber
      das wollte ich aber so nicht, da die spätere verarbeitung noch komplexer wird.

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

      Kommentar


      • #4
        \w sucht nach einem Perl-"word".
        stimmt ja \w war alphanummerisch

        da die spätere verarbeitung noch komplexer wird.
        aso kann man ja nicht wissen.
        tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
        documentation: php.net mysql.com framework.zend.com

        Die Nachtwache!

        Kommentar


        • #5
          Mein Vorschlag:
          Code:
          <([a-z][a-z0-9]*)[^>]*>(.*?)</\1>
          Präziser und durch die Backreference im schließenden Tag meiner Meinung nach etwas sauberer.

          Grüße
          Zuletzt geändert von Griecherus; 21.02.2008, 21:46.
          Nieder mit der Camel Case-Konvention

          Kommentar


          • #6
            hatte ich schon probiert, wirft mir nur leider:
            Code:
            Array
            (
                [0] => Array
                    (
                        [0] => <P class="absatz">Hier kommt Text</P>
                        [1] => P
                        [2] => Hier kommt Text
                        [3] => </P>
                    )
            
                [1] => Array
                    (
                        [0] => <H1>Titel</H1>
                          <A href="bla.htm">bla</A>
                        [1] => H
                        [2] => Titel</H1>
                          <A href="bla.htm">bla
                        [3] => </A>
                    )
            )
            aus, <B...</B> wird überhaupt nicht berücksichtigt und mit dem <H1> stimmt immer noch was nicht.
            PHP-Code:
            preg_match_all ("/<([a-z][a-z0-9]*)[^>]*>(.*)</\1>/Um",$result$hitsPREG_SET_ORDER); 
            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Ich habe meinen Beitrag noch editiert, achte auf das ? in der zweiten Backreference. RegExp-Evaluator spuckt dann auch folgendes Ergebnis aus:

              Code:
              Array
              (
                  [0] => Array
                      (
                          [0] => <A name="bla">bla</A>
                          [1] => A
                          [2] => bla
                      )
                  [1] => Array
                      (
                          [0] => <P>blubb</P>
                          [1] => P
                          [2] => blubb
                      )
                  [2] => Array
                      (
                          [0] => <A name="laber">laber</A>
                          [1] => A
                          [2] => laber
                      )
                  [3] => Array
                      (
                          [0] => <H1>laber</H1>
                          [1] => H1
                          [2] => laber
                      )
              )
              Code:
              @<([a-z][a-z0-9]*)[^>]*>(.*?)</\1>@is
              EDIT:

              Die B-Tags sind im Ergebnis nicht enthalten, da ich in der Eile des Gefechts das letzte `>` nicht mit kopiert habe...

              Zuletzt geändert von Griecherus; 21.02.2008, 22:06.
              Nieder mit der Camel Case-Konvention

              Kommentar


              • #8
                RegExp-Evaluator spuckt dann auch folgendes Ergebnis aus
                php leider nicht, da kommt das selbe ergebnis wie beim letzten mal. k.a. warum. habe mir vorgestern meine linux-kiste zerschrotet und arbeite daher mit xampp.



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

                Kommentar


                • #9
                  Erstaunlich... Zeich mal den Code. Mein xampp gibt mir das Ergebnis auch genau so aus, wie dus haben möchtest:

                  Code:
                  <pre>Array
                  (
                      [0] => Array
                          (
                              [0] => <A name="bla">bla</A>
                              [1] => A
                              [2] => bla
                          )
                  
                      [1] => Array
                          (
                              [0] => <P>blubb</P>
                              [1] => P
                              [2] => blubb
                          )
                  
                      [2] => Array
                          (
                              [0] => <A name="laber">laber</A>
                              [1] => A
                              [2] => laber
                          )
                  
                      [3] => Array
                          (
                              [0] => <H1>laber</H1>
                              [1] => H1
                              [2] => laber
                          )
                  
                      [4] => Array
                          (
                              [0] => <B class="superfett">und noch etliches weitere</B>
                              [1] => B
                              [2] => und noch etliches weitere
                          )
                  
                  )
                  </pre>
                  PHP-Code:
                  $html = <<<HTML
                  <A name="bla">bla</A> oder <P>blubb</P> 
                  oder <A name="laber">laber</A><H1>laber</H1>
                  <B class="superfett">und noch etliches weitere</B>
                  HTML;

                  preg_match_all('@<([a-z][a-z0-9]*)[^>]*>(.*?)</\\1>@is'$html$matchesPREG_SET_ORDER);

                  echo 
                  '<pre>';
                  print_r($matches);
                  echo 
                  '</pre>'
                  Zuletzt geändert von Griecherus; 21.02.2008, 22:23.
                  Nieder mit der Camel Case-Konvention

                  Kommentar


                  • #10
                    da bekomm ich ein leeres array!



                    ach ja php 5.2.2

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

                    Kommentar


                    • #11
                      Original geschrieben von Kropff
                      da bekomm ich ein leeres array!



                      ach ja php 5.2.2

                      gruß
                      peter
                      Was?! Auch dran gedacht, dass das Forum den Backslash der zweiten Backreference gemampft hat?

                      Getestet unter PHP 5.2.5
                      Nieder mit der Camel Case-Konvention

                      Kommentar


                      • #12
                        Was?! Auch dran gedacht, dass das Forum das Backslash der zweiten Backreference gemampft hat?
                        setz bitte mal zwei backslashes davor, dann mampft er es nicht mehr.

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

                        Kommentar


                        • #13
                          Original geschrieben von Kropff
                          setz bitte mal zwei backslashes davor, dann mampft er es nicht mehr.

                          danke
                          peter
                          Erledigt. Wie siehts jetzt bei dir aus?
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            Erledigt. Wie siehts jetzt bei dir aus?
                            ach, ich könnte deinen weißen behaarten hintern küssen ... wenn du ihn vorher mähst

                            anbei noch mal meine modifierte lösung, die ich für mein problem benötige:
                            PHP-Code:
                            $html '<A name="bla">bla</A> oder <P>blubb</P> 
                                        oder <A name="laber">laber</A><H1>laber</H1>
                                        <B class="superfett">und noch etliches weitere</B>'
                            ;

                            preg_match_all('/<([a-z0-9]*)[^>]*>(.*?)<\\\/(\\\1)>/s'$html$matchesPREG_SET_ORDER);

                            echo 
                            '<pre>';
                            print_r($matches);
                            echo 
                            '</pre>'
                            vielen dank
                            peter
                            Zuletzt geändert von Kropff; 21.02.2008, 22:40.
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Kommentar


                            • #15
                              OffTopic:

                              Original geschrieben von Kropff
                              ach, ich könnte deinen weißen behaarten hintern küssen ... wenn du ihn vorher mähst

                              vielen dank
                              peter
                              Nach der ganzen Hilfe auch noch Ansprüche stellen... Augen zu und durch


                              Gern geschehen
                              Nieder mit der Camel Case-Konvention

                              Kommentar

                              Lädt...
                              X