Autor Zpráva
PetrX
Profil *
Mám takový problém jak vysosnout požadovaný text, který je na více řádcích.

text je např takovýto:
	
<tr>
 <td></td>
 <td><img src="/images/wpttypes/sm/2682.gif" alt="" />&nbsp;<a href="http://www.geocaching.com/track/details.aspx?id=2283231">40 Years Man on the Moon - Start Geocoin</a></td>
 <td>&nbsp;</td>
 <td><a href="http://www.geocaching.com/profile/?guid=68f06dca-b4c0-40f0-a0ad-6f38ec8b5558">PetrX</a></td>
 <td><img src="/images/track/loc_user.jpg" width="22" height="22" alt="" />&nbsp;<a href="http://www.geocaching.com/profile/?guid=68f06dca-b4c0-40f0-a0ad-6f38ec8b5558">PetrX</a></td>
 <td>0 km</td>
 </tr>


Kód:
<?php
$zdroj = file_get_contents("http://www.geocaching.com/track/search.aspx?uid=68f06dca-b4c0-40f0-a0ad-6f38ec8b5558");
preg_match_all('~<td>(.*)</td><td><img src="/images/wpttypes/sm/([0-9,a-z]{1,4})\.gif" alt="" />&nbsp;<a href="([^"]+)">([^<]+)</a></td><td>(.*)</td><td><a href="<a href="([^"]+)">([^<]+)</a></td><td><img src="/images/track/loc_user.jpg" width="([0-9]{1,2})" height="([0-9]{1,2})" alt="" />&nbsp;<a href="<a href="<a href="([^"]+)">([^<]+)</a></td><td>(.+)</td>~isU', $zdroj, $out);
?>
<xmp>
<?php print_r($out); ?>
</xmp>


Tento kód nefunguje, ale problém nejspíše bude v tom konci řádku. Když použiji \n tak mi to nefunguje. Potřebuji poradit jak v regulérním výraze "vytvořím" konec řádku.
Majkl578
Profil
Problém je v tom, že nedodržuješ formátování zdrojových dat, tj. odsazení, nové řadky apod.
Jinak ten výraz je sám o sobě nepřehledný a zbytečně složitý.

Zkus to takto:
$zdroj = file_get_contents('http://www.geocaching.com/track/search.aspx?uid=68f06dca-b4c0-40f0-a0ad-6f38ec8b5558');

preg_match_all('~<td>(.*)</td>\s*<td><img src="/images/wpttypes/sm/(\w{1,4})\.gif" alt="" />&nbsp;<a href="(.+)">(.+)</a></td>\s*<td>(.*)</td>\s*<td><a href="(.+)">(.+)</a></td>\s*<td><img src="/images/track/loc_user.jpg" width="(\d{1,2})" height="(\d{1,2})" alt="" />&nbsp;<a href="(.+)">(.+)</a></td>\s*<td>(.+)</td>~isU', $zdroj, $out, PREG_SET_ORDER);

var_dump($out);
Dle mého názoru zachytáváš i zbytečný "nepořádek", jako třeba hodnotu width, ale to nechám na tobě.
PetrX
Profil *
To bylo jen na ukázku, ale pravděpodobně to byl ten problém. Každopádně pro mě bylo nejdůležitější to \s*. Zbytek pořeším sám. Díky

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0