![]() |
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) |
BOF. Danke erst mal.
Man, ich habe mir gerade durchgelesen wie dieses PHP-Code:
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:D 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 ;-) |
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 |
Neue Frage : Wie funktioniert das jetzt mit Text?
Freue mich auf eure fachkundige Hilfe ;-) |
Zitat:
Zitat:
Zitat:
greets |
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. |
Zitat:
Anscheinend habe ich es schlecht formuliert.. Ich würde gerne den Text, ähnlich diesem Schema: PHP-Code:
Damit es verständlicher wird, habe ich das ganze mal aufgeschlüsselt: Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
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 |
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. |
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); |
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ßtalschüler Kreissieger im Fußball</b><br> Im Rahmen der schulsportlichen Wettbewerbe "Jugend trainiert für Olympia", Wettkampfklasse 4, konnte die Mannschaft der Theißtalschule Niedernhausen, am Dienstag, den 2. Mai die Gegner aus Michelbach mit 6:0, Oestrich-Winkel mit 12:0, Rü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ür den Regionalentscheid der Schulen am 24.05.06 in Rüsselsheim. <br> Jörg Laaß <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ßtalschule Niedernhausen<br> Stehend v.li. n. re.: Jonas Weck, Johannes Steyer, Sportlehrer Jörg Laaß, Sabri El Funte, Julian Linke, Jan Oluczak, Lukas Stä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ässlich des Besuchs einer Gruppe von Austauschschülerinnen und -schülern unserer franzö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ür Groß und Klein. Auch für das leibliche Wohl ist natürlich gesorgt. <br> Flyer (Vorderseite): <a href="2006/Schulfestprogramm1.jpg">Schulfestprogramm1.jpg (840kB)</a><br> Flyer (Rückseite m. Programm): <a href="2006/Schulfestprogramm2.jpg">Schulfestprogramm2.jpg (880 kB)</a> <br>(Aufgrund der Größe der Dateien kann es je nach Zugangsgeschwindigkeit zu längeren Ladezeiten kommen.) </td> </tr> <tr> <td class="oben"> 26.04.2006</td> <td> <b>Theißtalschüler Spitze in Mathe </b><br> Mit Akschay Kakkar konnte sich erneut ein Schüler der Theißtalschule auch in der zweiten Runde des Mathematikwettbewerbs des Landes Hessen, die auf Kreisebene ausgetragen wurde, durchsetzten. Wir drücken Akschay für die Endrunde auf Landesebene am 16. Mai fest die Daumen! (<a href="ttn0603/page13.html">Ausfü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?
|
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 |
lol, nee warum aufräumen?
bei if/then Abfragen in regexp braucht es die Klammern und die Restlichen Klammern sind für die Ausgabe. |
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 |
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/
|
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... |
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:40 Uhr. |
Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG