regexp - bin ich heute zu blöde?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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
    Last edited by Bugbuster; 21-02-2008, 20:11.
    tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
    documentation: php.net mysql.com framework.zend.com

    Die Nachtwache!

    Comment


    • #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

      Comment


      • #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!

        Comment


        • #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
          Last edited by Griecherus; 21-02-2008, 20:46.
          Nieder mit der Camel Case-Konvention

          Comment


          • #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

            Comment


            • #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...

              Last edited by Griecherus; 21-02-2008, 21:06.
              Nieder mit der Camel Case-Konvention

              Comment


              • #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

                Comment


                • #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>'
                  Last edited by Griecherus; 21-02-2008, 21:23.
                  Nieder mit der Camel Case-Konvention

                  Comment


                  • #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

                    Comment


                    • #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

                      Comment


                      • #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

                        Comment


                        • #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

                          Comment


                          • #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
                            Last edited by Kropff; 21-02-2008, 21:40.
                            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                            Meine Seite

                            Comment


                            • #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

                              Comment

                              Working...
                              X