reguläre ausdrücke

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

  • reguläre ausdrücke

    hallo

    ich programmiere seit ein paar wochen mit php.


    ich habe ein kleines problem, bei dem ich einfach nicht mehr weiter weiss. ich hoffe man kann hier mir helfen.

    ich habe einen html code vor mir liegen, aus dem ich bestimmte daten herausfiltieren soll.

    [HMTL]
    <tr>

    <td><div class="forum"><b>Datum</b></div></td>

    <td><div class="forum">31.12.03, 16:28</div></td>

    </tr>

    <tr>
    [/HTML]

    da möchte ich z.b. den datum herausfiltern und dann anschliessend auf die folgende datumformat umwandeln JJJJMMTT (ohne trennzeichen oder ohne punkt)



    ich habe mir gedacht ich versuche es über d. funktion preg_match_all.

    irgendwie funktioniert es aber leider nicht.

    es kommt immer zu d. folgenden fehlermeldung

    Warning: Unknown modifier 'b' in /var/www/lyrikum/lyrikum/php/



    als code habe ich folgendes verwendet
    PHP-Code:
    §snoopy_text      // ist die gesamte html code eingelesen und gespeichert wird.

    $origdate_start_text"<td><div class=\"forum\"><b>Datum</b></div></td>";
    $origdate_end_text", ";


    preg_match_all('/'.$origdate_start_text.'(.*?)'$origdate_end_text.'/msi'
                             
    $snoopy_text,
                             
    $result,
                   
    PREG_SET_ORDER);
    $msgdatum stripslashes(FixQuotes($result[0][1])); 
    es funktioniert leider nicht. und ich weiss nicht warum.

    hoff, jemand kann mir behilflich sein


    grüsse aus wien
    Zuletzt geändert von feurio; 02.05.2004, 19:00.
    "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
    goethe (faust)

  • #2
    dein delimiter "/" taucht im suchtext auf ... entweder im suchtext maskieren oder einen anderen delimiter verwenden.
    Kissolino.com

    Kommentar


    • #3
      die sache mit d. delimiter habe ich leider nicht so ganz verstanden. es ist erste mal, dass ich mich regulären ausdrücken auseinander setze. bei allen anderen suchfunktionen hat's funktioniert.

      bin aber beeindruckt von schnellen antwort.
      "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
      goethe (faust)

      Kommentar


      • #4
        du sollst nen anderen delimiter verwenden z.b. ! oder | oder sonstwas
        ja /msi <-- auch unsinn. entweder s oder m .... ned beide
        h.a.n.d.
        Schmalle

        http://impressed.by
        http://blog.schmalenberger.it



        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
        ... nur ohne :-)

        Kommentar


        • #5
          Code:
          preg_match_all('/'.$ ...
          delimiter       ^
          im "</b>" ist wieder ein slash ... hier steigt es aus und php meckert den modifier "b" an, der nach dem delimiter kommt. nimm stattdessen ein "%" oder ein "\\" oder benutze addslashes() um das zu umgehen.

          hier gibts auch ein tutorial zu regex ... zum besseren verständnis
          Kissolino.com

          Kommentar


          • #6
            danke. ich muss sagen ich bin sehr beeindruckt von dem forum, weil schnell antworten kommen. wird wohl ab jetzt mein lieblingsforum sein

            ich werde den delimiter gleich ändern und nochmal versuchen.

            ich werde mir danach auch die regex tutorial reinziehen.

            wie kann ich am besten einen datum im format "tt.mm.jj"
            auf "JJJJMMTT" umwandeln? gibt's automtische umwandlungsmöglichkeiten?




            grüsse


            serkan
            "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
            goethe (faust)

            Kommentar


            • #7
              $datum = "12.04.1978";

              $hack = explode (".", $datum);

              $neuDatum = $hack[2]."-".$hack[1]."-".$hack[0];

              jetzt kannst du die datumsfunktion date() in kombination mit strtotime() verwenden, um weitere formate zu bekommen. tipp: manual lesen

              EDIT:
              leichte fehler ausgbessert
              h.a.n.d.
              Schmalle

              http://impressed.by
              http://blog.schmalenberger.it



              Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
              ... nur ohne :-)

              Kommentar


              • #8
                danke

                ich muss bis morgen etwas fertig machen.
                hab mir schon das buch von krause bestellt wo die referenzen auch drinnen sind. ich kann längerfristig leider nicht ständig auf d. bildschirm schauen (hat aber nicht mit d. auflösung od. frequenz zu tun, sondern leider nur mit meinen augen), weil meine augen ziemlich empfindlich sind. deshalb habe ich ja auch das buch bestellt.


                aber wie gesagt, ich werde es gleich ändern. thx thx und nochmal thx
                "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
                goethe (faust)

                Kommentar


                • #9


                  leider ist es doch nicht so einfach.

                  hab jetzt meinen code geändert

                  PHP-Code:
                      $origdate_start_text"<td><div class=\"forum\"><b>Datum</b></div></td>\r\n                                        <td><div class=\"forum\">";

                  $origdate_end_text", "

                   

                                   
                  preg_match_all('%'.$origdate_start_text.'(.*?)'.$origdate_end_text.'%msi',
                                                 
                  $snoopy_text,
                                                 
                  $result,
                                                 
                  PREG_SET_ORDER);
                                    
                  $msgdatum stripslashes(FixQuotes($result[0][1]));        //MSGDATUM 

                  es funzt trotzallem nicht.

                  HTML-Code:
                  <tr>
                  
                  <td><div class="forum"><b>Datum</b></div></td>
                  
                  <td><div class="forum">31.12.03, 16:28</div></td>
                  
                  </tr>
                  
                  <tr>
                  hab, da es zeilenumbrüche gibt auch diese bei d. variablen $origdate_start_text berücksichtigt
                  (gleich aus d. tuturial aus dieser website ausgedruckt und gelesen).
                  es funzt aber nicht.
                  ich weiss was das problem ist, aber ich kann sie nicht lösen.
                  problem ist, dass d. ausdruck <td><div class="forum"> fast überall vorkommt.

                  gibt's andere möglichkeiten, ohne d. html code zu ändern?

                  bin für jeden hinweis dankbar.
                  Zuletzt geändert von feurio; 02.05.2004, 20:16.
                  "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
                  goethe (faust)

                  Kommentar


                  • #10
                    dein suchmuster scheint etwas *hüstel* ... ausserdem ist bei preg_match_all uU der modifier 'U' für ungreedy angesagt. probier das mal:
                    PHP-Code:
                    preg_match_all('%class="forum">([0-9]{2,}.[0-9]{2,}.[0-9]{2,}, [0-9]{2,}:[0-9]{2,})%siU',$text$e);
                    print_r($e); 
                    ... ohne gewähr
                    Kissolino.com

                    Kommentar


                    • #11
                      hat leider auch nichts geholfen.

                      aber trotzdem thx.

                      ich gebe mich geschlagen.


                      falls ich die lösung finde (hab ja morgen vormittag noch zeit dafür), werde ich's posten
                      "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
                      goethe (faust)

                      Kommentar


                      • #12
                        Original geschrieben von feurio
                        hat leider auch nichts geholfen.
                        was klappt denn nicht? fehlermeldung? codebeispiel?
                        Kissolino.com

                        Kommentar


                        • #13
                          ich glaube ich bin einfach überfordert.

                          stehe schon seit stunden vor dem code.

                          hab vorhin den falschen code ausprobiert.


                          jetzt funktioniert'S fast.


                          PHP-Code:
                                          preg_match_all('%class="forum">([0-9]{2,}.[0-9]{2,}.[0-9]{2,}, [0-9]{2,}:[0-9]{2,})%siU',$snoopy_text$resultPREG_SET_ORDER);
                                          
                          $msgdatum stripslashes(FixQuotes($result[0][1]));
                                          
                          //                $hack = explode (".", $result);
                          //                $msgdatum = $hack[2]."-".$hack[1]."-".$hack[0]; 

                          als ergebnis kriege ich bei einem datum
                          23.06.03

                          03, 0623



                          was eigentlich eh gut sein sollte. weil es mittlerweile JJ, MMTT format hat.
                          bloss ich habe gar keine ahnung mehr ehrlichgesagst.

                          ich habe den überblick irgendwie verloren. ob das damit zusammenhängt, dass ich zu lang schon daran sitze?
                          "nur der verdient sich freiheit wie das leben, der täglich sie erobern muss"
                          goethe (faust)

                          Kommentar


                          • #14
                            Original geschrieben von feurio
                            ob das damit zusammenhängt, dass ich zu lang schon daran sitze?
                            ... jepp, nach dem preg kommst du irgendwie in taumeln ... mach schluss und schaus dir morgen nochmal an ... meist gehts dann wieder
                            Kissolino.com

                            Kommentar


                            • #15
                              irgendwas machst du falsch, denn mit
                              PHP-Code:
                              <?php
                              $text 
                              '<td><div class="forum">31.12.03, 16:28</div></td>';
                              preg_match_all('%class="forum">([0-9]{2,}.[0-9]{2,}.[0-9]{2,}, [0-9]{2,}:[0-9]{2,})%siU',$text$e);
                              echo 
                              '<br>'.$e[0][0];
                              echo 
                              '<br>'.$e[1][0];
                              ?>
                              kommt raus:
                              class="forum">31.12.03, 16:28
                              31.12.03, 16:28

                              Kommentar

                              Lädt...
                              X