HTM-Dok mit PHP auseinandernehmen und in DB

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

  • #16
    Alle ausser die ca untersten vier.

    also:

    preg_match_all("/<td class=\"oben\">[\ ]?\d{1,2}\.\d{1,2}\.\d{4}<\/td>/i",$string, $dates)

    Kommentar


    • #17
      BOF. Danke erst mal.

      Man, ich habe mir gerade durchgelesen wie dieses
      PHP-Code:
      preg_match_all("/<td class=\"oben\">[\ ]?\d{1,2}\.\d{1,2}\.\d{4}<\/td>/i",$string$dates
      funktioniert.

      Ach
      Du
      Scheiße.

      Darf ich mal sanft fragen wer sich das ausgedacht hat? Naja, egal. ICh beginne es zu verstehen^^

      Ok, soweit hab ich's, glaub ich (hoffe ich)..

      Wie die anderen gehen werden.. Naja, ferne Zukunftsmusik nenne ich das mal

      Dachte ja immer, ich könnte einigermaßen PHP.. aber Das. neeeee.

      Neue Frage: Wie funktioniert das jetzt mit Text?

      Freue mich auf eure fachkundige Hilfe ;-)
      Zuletzt geändert von ThE_-_BliZZarD; 31.10.2006, 18:42.
      Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
      PHP, CSS 2.1, JS, Delphi, C
      Ich mag: Japan, Speedmetal, H3nta1s(^^)

      Kommentar


      • #18
        ohh so weit hatte ich nun nicht mehr gelesen..
        okay...
        mit jmcs aktueller Lösung sollten dann tatsächlich ALLE Einträge gematcht werden..

        greetz, high
        Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
        When everything else fails, manipulate the data...
        Beschriftungen / Großformatdruck / Werbemittel

        Kommentar


        • #19
          Neue Frage : Wie funktioniert das jetzt mit Text?

          Freue mich auf eure fachkundige Hilfe ;-)
          Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
          PHP, CSS 2.1, JS, Delphi, C
          Ich mag: Japan, Speedmetal, H3nta1s(^^)

          Kommentar


          • #20
            Original geschrieben von ThE_-_BliZZarD
            BOF.
            Bastard Operator from [was?]

            Darf ich mal sanft fragen wer sich das ausgedacht hat? Naja, egal. ICh beginne es zu verstehen^^
            Niemand. Regexps sind uns von gott gegeben


            Dachte ja immer, ich könnte einigermaßen PHP.. aber Das. neeeee.
            Hat nicht viel mit php zu tun.

            greets
            (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

            Kommentar


            • #21
              du lässt dir einfach den Dateiinhalt ausgeben und weist diesen dann einem String zu.

              Stichwort: file_get_contents() oder fopen()

              mit diesem String durchläufst du dann die regexp.

              Kommentar


              • #22
                Bastard Operator from [was?]
                ^^ bof, franz. Ausdruck um Erstaunen auszudrücken.

                Anscheinend habe ich es schlecht formuliert..
                Ich würde gerne den Text, ähnlich diesem Schema:
                PHP-Code:
                preg_match_all("/<td class=\"oben\">[ ]?d{1,2}.d{1,2}.d{4}</td>/i",$string$dates
                auslesen. Das hat (denk ich jetzt mal) recht wenig mit fopen zu tun, da bin ich schon lange vorbei. Ich würde nur gerne erfahren wie ich Text mit diesem Schema erkenen kann, da bis jetzt nur Zahlen erkannt wurden.

                Damit es verständlicher wird, habe ich das ganze mal aufgeschlüsselt:

                <tr>
                <td class="oben"> 26.04.2006</td>
                DATUM. dafür habe ich ja bereits ein preg_match_all() bekommen, vielen Dank nochmal ;-)
                <td> <b>Dies ist die Überschrift</b>
                ÜBERSCHRIFT. Das will ich auch noch haben. als einzelnes, aber MIT dem <b> wenn eins dabei steht, wenn möglich auch z.B. mit <span>'s.. || Wird noch benötigt
                <br>
                Dieses <br> kennzeichnet das Ende der Überschrift und den Beginn des TEXTES, der auch als einzelnes Element ausgelesen werden soll.

                BLA BLA BLA BLA BLA BLA -- viel Text --
                ENDE des Textes
                </td>
                </tr>
                Das ganze soll dann ungefähr so aussehen, das ich dann 3 Arrays habe, jedes mit X Elementen, und dann X INSERT's in die DB mache,
                immer mit den 3 Feldern Datum, Headline und Text.

                Hoffe das jetzt voll verständlich ist was ich genau vorhab.


                Freue mich auf Hilfe ;-)
                BliZZarD
                Zuletzt geändert von ThE_-_BliZZarD; 01.11.2006, 14:14.
                Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
                PHP, CSS 2.1, JS, Delphi, C
                Ich mag: Japan, Speedmetal, H3nta1s(^^)

                Kommentar


                • #23
                  Ich dachte das sei jetzt klar.

                  (Der unterste Eintrag hat keinen Titel.... vieleicht auch noch andere und ich habe gerade gesehen die untersten Einträge enthalten auch nicht class="oben"...)

                  preg_match_all("/<td>(?(.{1,80}<br>)(.*?<br>))?(.*)<\/td>/is",$string, $td)
                  for($a=0;$a<count($td);$a++){
                  $titles[$a] = preg_replace("/<td>(?(.{1,80}<br>)(.*?<br>))?(.*)<\/td>/is","$1",$td[$a]);
                  $texts[$a] = preg_replace("/<td>(?(.{1,80}<br>)(.*?<br>))?(.*)<\/td>/is","$2",$td[$a]);
                  }

                  ACHTUNG! Das Forum hat nach allen <br> einen Abstand eingefügt.

                  Kommentar


                  • #24
                    Hmm, okay, habs ausprobiert, aber folgendes kassiert:

                    Warning: preg_match_all(): Unknown modifier 't' in nssf.php on line 19

                    Warning: preg_match_all(): Compilation failed: assertion expected after (?( at offset 7 in nssf.php on line 21
                    array(0) { } NULL NULL

                    Die betreffenden Zeilen sind:

                    19: preg_match_all("/<td class=\"oben\">[ ]?d{1,2}.d{1,2}.d{4}</td>/i", $haupt, $dates);

                    21: preg_match_all("/<td>(?(.{1,80}<br> )(.*?<br> ))?(.*)<\/td>/is", $haupt, $td);
                    Ich kann: Deutsch, Englisch, Französisch, Japanisch (im Aufbau)
                    PHP, CSS 2.1, JS, Delphi, C
                    Ich mag: Japan, Speedmetal, H3nta1s(^^)

                    Kommentar


                    • #25
                      versuch mal diese Regexp:

                      <td(?: class=\"oben\")?>[\ ]?(\d{1,2}\.\d{1,2}\.\d{4})<\/td>\s*<td>(?(.{1,80}<br>)(.*?<br>))?(.*?)<\/td>

                      unter http://regexlib.com/RETester.aspx

                      mit dem String:

                      '<tr>

                      <td class="oben"> 17.05.2006</td>

                      <td> <b>Thei&szlig;talsch&uuml;ler Kreissieger im Fu&szlig;ball</b><br>

                      Im Rahmen der schulsportlichen Wettbewerbe "Jugend trainiert f&uuml;r Olympia",

                      Wettkampfklasse 4, konnte die Mannschaft der Thei&szlig;talschule Niedernhausen,

                      am Dienstag, den 2. Mai die Gegner aus Michelbach mit 6:0, Oestrich-Winkel mit 12:0,

                      R&uuml;desheim mit 2:1 und Taunusstein-Hahn mit 5:0 besiegen.

                      Im Vielseitigkeitsparcour erreichte sie die Bestzeit. Die Mannschaft qualifizierte

                      sich damit als Kreissieger f&uuml;r den Regionalentscheid der Schulen am 24.05.06

                      in R&uuml;sselsheim.

                      <br>

                      J&ouml;rg Laa&szlig;
                      <br>
                      <a href="../bilder/2006/fussball_gross.JPG" target="_blank">
                      <img src="../bilder/2006/fussball.jpg" width="540" height="405" border="0" alt=""></a>
                      <p style="font-size: 7 pt;">Kreissieger Rheingau-Taunus, Wettkampfklasse 4,
                      Thei&szlig;talschule Niedernhausen<br>
                      Stehend v.li. n. re.: Jonas Weck, Johannes Steyer, Sportlehrer J&ouml;rg Laa&szlig;, Sabri El Funte,
                      Julian Linke, Jan Oluczak, Lukas St&auml;hler<br>
                      Knieend v. li. n. re: Johannes Winheim, Davide Zangari, Lars Klesper, Daniel Schaefer.</p>
                      </td>
                      </tr>

                      <tr>

                      <td class="oben"> 26.04.2006</td>

                      <td> <b>Schulfest mit attraktivem Programm </b><br>

                      Wir laden Sie ein zu unserem Schulfest am Samstag, 06.05., von 10.00 bis 14.00 Uhr. Anl&auml;sslich des Besuchs einer Gruppe von Austauschsch&uuml;lerinnen und -sch&uuml;lern unserer franz&ouml;sischen Partnerschule in Belley (Frankreich) steht das Fest in diesem Jahr unter dem Motto: "Zu Gast bei Freunden - Bienvenue Belley".<br>

                      Wir erwarten Sie mit einem attraktives Programm f&uuml;r Gro&szlig; und Klein. Auch f&uuml;r das leibliche Wohl ist nat&uuml;rlich gesorgt. <br>

                      Flyer (Vorderseite): <a href="2006/Schulfestprogramm1.jpg">Schulfestprogramm1.jpg (840kB)</a><br>

                      Flyer (R&uuml;ckseite m. Programm): <a href="2006/Schulfestprogramm2.jpg">Schulfestprogramm2.jpg (880 kB)</a>

                      <br>(Aufgrund der Gr&ouml;&szlig;e der Dateien kann es je nach Zugangsgeschwindigkeit zu l&auml;ngeren Ladezeiten kommen.) </td>

                      </tr>

                      <tr>

                      <td class="oben"> 26.04.2006</td>

                      <td> <b>Thei&szlig;talsch&uuml;ler Spitze in Mathe </b><br>

                      Mit Akschay Kakkar konnte sich erneut ein Sch&uuml;ler der Thei&szlig;talschule auch

                      in der zweiten Runde des Mathematikwettbewerbs des Landes Hessen, die auf Kreisebene ausgetragen

                      wurde, durchsetzten. Wir dr&uuml;cken Akschay f&uuml;r die Endrunde auf Landesebene am 16. Mai

                      fest die Daumen! (<a href="ttn0603/page13.html">Ausf&uuml;hrlicher Bericht</a>)

                      </td>

                      </tr>'

                      ohne die hochkommas am Anfang und Ende.

                      Die Ausgabe stimmt da genau.

                      kann es sein, dass PHP keine if/then Anweisungen in Regex erlaubt?

                      EDIT:
                      PS: Du musst natürlich auf http://regexlib.com/RETester.aspx noch singleline einschalten.
                      Und wieder: nach den <br>s werden vom Forum whitespaces eigefügt. Die musst du wieder entfernen.

                      Kommentar


                      • #26
                        doch, erlaubt es..

                        du musst einfach nur bei </td> einen backslash als escape-zeichen vor dern slash setzen..

                        <\/td>

                        sonst ist er der meinung, der / wäre schon schließender delimiter und wertet das folgende t als Modifier.. das es den Modifier t nicht gibt, erzeugt er diesen Fehler in zeile 19..


                        21: preg_match_all("/<td>(?(.{1,80}<br> )(.*?<br> ))?(.*)<\/td>/is", $haupt, $td);

                        hier solltest du mal deine ? aufräumen.. und die klammern anders setzen..
                        öhhm.. sag mal bitte in worten, was hier gematcht werden soll..





                        greetz, high
                        Zuletzt geändert von highrise; 02.11.2006, 13:15.
                        Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                        When everything else fails, manipulate the data...
                        Beschriftungen / Großformatdruck / Werbemittel

                        Kommentar


                        • #27
                          lol, nee warum aufräumen?

                          bei if/then Abfragen in regexp braucht es die Klammern

                          und die Restlichen Klammern sind für die Ausgabe.

                          Kommentar


                          • #28
                            die klammern für die Ausgabe müssen aber escaped werden.. mit \
                            sonst versucht er doch dort einen block draus zu erkennen..

                            oder reden wir aneinander vorbei? *grübel*... mir ist die Logik deiner bedingung nicht ganz klar..



                            greetz, high
                            Zuletzt geändert von highrise; 02.11.2006, 13:49.
                            Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                            When everything else fails, manipulate the data...
                            Beschriftungen / Großformatdruck / Werbemittel

                            Kommentar


                            • #29
                              ich glaube schon das ist ne Lookahead-kombination und wird in den regexp benutzt. Warum also escapen?

                              Lookahead --> Alternierungen

                              wenns immer noch nicht geht versuche es so:

                              "/<td(?: class=\"oben\")?>[\ ]?(\d{1,2}\.\d{1,2}\.\d{4})<\/td>\s*<td>(?(?=.{1,80}<br>)(.*?<br>))?(.*?)<\/td>/is"

                              hier noch ein Beispiel von mir:
                              http://mitglied.lycos.de/jmc/

                              EDIT:
                              Nicht vergessen nach den <br>s die Abstände zu löschen die das Forum reinmacht
                              Zuletzt geändert von jmc; 02.11.2006, 14:03.

                              Kommentar


                              • #30
                                richtig.. nur, dann erwartet er ja auch eine assertion im folgenden.. (wie der fehler deutlich zum ausdruck bringt).. für einen positiven lookahead erwartet er noch ein =

                                also z.B. (?=foo).

                                greetz, high...
                                Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
                                When everything else fails, manipulate the data...
                                Beschriftungen / Großformatdruck / Werbemittel

                                Kommentar

                                Lädt...
                                X