PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   Projekthilfe (https://www.php-resource.de/forum/projekthilfe/)
-   -   HTM-Dok mit PHP auseinandernehmen und in DB (https://www.php-resource.de/forum/projekthilfe/77417-htm-dok-mit-php-auseinandernehmen-und-in-db.html)

jmc 31-10-2006 19:31

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)

ThE_-_BliZZarD 31-10-2006 19:35

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: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 ;-)

highrise 31-10-2006 19:35

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

ThE_-_BliZZarD 01-11-2006 11:59

Neue Frage : Wie funktioniert das jetzt mit Text?

Freue mich auf eure fachkundige Hilfe ;-)

closure 01-11-2006 12:35

Zitat:

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

Zitat:

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


Zitat:

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

greets

jmc 01-11-2006 13:01

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.

ThE_-_BliZZarD 01-11-2006 13:36

Zitat:

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:

Zitat:

<tr>
<td class="oben"> 26.04.2006</td>
DATUM. dafür habe ich ja bereits ein preg_match_all() bekommen, vielen Dank nochmal ;-)
Zitat:

<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
Zitat:

<br>
Dieses <br> kennzeichnet das Ende der Überschrift und den Beginn des TEXTES, der auch als einzelnes Element ausgelesen werden soll.

Zitat:

BLA BLA BLA BLA BLA BLA -- viel Text --

ENDE des Textes
Zitat:

</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

jmc 01-11-2006 16:35

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.

ThE_-_BliZZarD 01-11-2006 17:31

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);

jmc 02-11-2006 13:49

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.


highrise 02-11-2006 14:13

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

jmc 02-11-2006 14:40

lol, nee warum aufräumen?

bei if/then Abfragen in regexp braucht es die Klammern

und die Restlichen Klammern sind für die Ausgabe.

highrise 02-11-2006 14:45

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

jmc 02-11-2006 14:50

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 :)

highrise 02-11-2006 15:06

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