Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] preg_match_all() (https://www.delphipraxis.net/97949-%5Bphp%5D-preg_match_all.html)

quendolineDD 19. Aug 2007 15:39


[PHP] preg_match_all()
 
Servus community.

Ich habe hier ein Script, welches die 1. 50 User von hier auslesen soll.

Nun, das ist zum Beispiel ein Auszug aus dem Quelltext, der Zeile des 1. Platzes.

Zitat:

<tr><td>1</td><td><a href="http://88.198.6.23/freewar/internal/fight.php?action=watchuser&act_user_id=1239" target="_blank">Bigfoot</td><td>Natla - Händler</td><td>258767</td></tr>
Code:
<?php
$top50= array();
echo "<pre>";
@$handle= fopen("http://rank.freewartools.com/?welt=W11&race=0&send=1", "rb");
if($handle == false) { echo "Verbindungsfehler"; exit(); }
$content= stream_get_contents($handle);
preg_match_all('/<tr><td>[0-9]+<\/td><td><a href=".+" target="_blank">(\w+)<\/td><td>(.+)<\/td><td>([0-9]+)<\/td><\/tr>/', $content, $match);

$top50= array_merge($top50, $match[1], $match[2], $match[3]);
print_r($top50);
echo "</pre>";
?>
Das Ergebnis ist
Zitat:

Array
(
[0] => sykes
[1] => Natla - Händler
[2] => 23989
)
In $match[0] stehen ja alle Treffer drinnen. Durch den Fehler im Stammquelltext, wo kein </a> gesetzt ist, wird alles durchweg verlinkt mit dem Profil des 1. Users. Außerdem wird mir alles nicht Zeilenweise dargestellt, wie ich es bei einem ähnlichen Script habe, welches mir die User durchweg von youtube.com ausliest.

Hab ich vielleicht einen Fehler in meinem regulärem Ausdruck?

Code:
preg_match_all('/<tr><td>[0-9]+<\/td><td><a href=".+" target="_blank">(\w+)<\/td><td>(.+)<\/td><td>([0-9]+)<\/td><\/tr>/', $content, $match);
Danke schonmal für die Hilfe
Gruß quen

Die Muhkuh 19. Aug 2007 15:59

Re: [PHP] preg_match_all()
 
Hi,

im Quelltext der Stammseite ist ein </a> drin. Vllt. solltest Du das doch beachten.

quendolineDD 19. Aug 2007 16:05

Re: [PHP] preg_match_all()
 
Die Verlinkung der einzelnen Profileist mit fehlerhaftem Quelltext verbunden, weil dort das </a> fehlt. Es kommt nochmal zum Schluss der Tabelle ein Weiter. Dort ist der schließende TAG gesetzt.

Ich wüsste nicht, inwiefern ich das beachten sollte.

omata 19. Aug 2007 18:15

Re: [PHP] preg_match_all()
 
Hallo quendolineDD,

vielleicht so...

Code:
  '/<tr><td>[0-9]+<\/td><td><a href=".+?" target="_blank">(.+?)<\/td><td>(.+?)<\/td><td>([0-9]+)<\/td><\/tr>/'
Gruss
Thorsten

quendolineDD 19. Aug 2007 18:51

Re: [PHP] preg_match_all()
 
Wow, jetzt geht's.

Was ist denn an dem "?" so besonders, das es in der Kombination mit .+ zu den richtigen Treffern kommt.

Danke nochmal :)

omata 19. Aug 2007 19:32

Re: [PHP] preg_match_all()
 
Hallo quendolineDD,

ohne ? ist .+ gierig. Mit ? wird nur nur das Nötigste berücksichtigt.

Gruss
Thorsten

Viking 6. Sep 2007 15:46

Re: [PHP] preg_match_all()
 
Huhu ihr, also ich habe auch ein kleines Problem:

Und zwar will ich aus dem String

avis (u)




das Wort "avis" herausfiltern.

Regex:

$regex = '/<a href="?searchItem=(.+?)">(.+?)<\/a>/';


Das Ergebnis ist ein leerer Array.


Kann mir jemand helfen?

Grüße

Matze 6. Sep 2007 16:49

Re: [PHP] preg_match_all()
 
Hallo Viking, herzlich Willkommen!

Ungetestet, nur über Google gefunden:

Code:
preg_match_all("|<a href=(.*)>(.*)</a>|", 'text1 [url="index.htm"]text2[/url] text3', $out, PREG_PATTERN_ORDER);
print_r($out);
Irgendein Index von $out sollte deinem Titel entsprechen. Die URL übrigens in einem weiteren, falls du das benötigen solltest.

Viking 6. Sep 2007 16:58

Re: [PHP] preg_match_all()
 
Hi danke dir, funzt.


Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz