Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: preg_match - получить все вхождения шаблона, а не только первое
 
 автор: BunK3R_r   (04.11.2006 в 01:55)   письмо автору
 
 

есть некая страница на удалённом сервере (http://сайт.ru/)
её содержимое:

<table border="0" align=center size=5>
   <tr>
    <td align=left><b>Ник</b></td>
    <td align=center><b>Уровень</b></td>
    <td colspan="2" align=center><b>Класс</b></td>
    <td align=right><b>PvP<b></b></b></td>
  </tr>
    <tr>
<td style="color:#8080FF">xLamoS*</td>
    <td align=center>76
</td>
    <td colspan="2" align=center></td>
    <td align=right>303
      /
        10
</td>
  </tr>
    <tr>
<td style="color:#8080FF">Ishid*</td>
    <td align=center>76
</td>
    <td colspan="2" align=center></td>
    <td align=right>5
      /
        0
</td>
  </tr>
    <tr>
<td style="color:#FF8080">Dol*</td>
    <td align=center>75
</td>
    <td colspan="2" align=center></td>
    <td align=right>0
      /
        0
</td>
  </tr>
</table>


вот скрипт:

<?
echo "<table border=\"0\" align=center>\n";
preg_match("/(<td style=)([^<]*)/i"file_get_contents("http://сайт.ru/"), $arr);
echo 
"<td style=".$arr[2];
echo 
"</td></tr> \n";
echo 
"</table>\n";
?>

он достаёт ивыводит вот эту часть color:#8080FF">xLamoS*
но мне надо что бы он доставал и вывлдил помимо первой части все остальные:
color:#8080FF">xLamoS*
color:#8080FF">Ishid*
color:#FF8080">Dol*

как мне это сделать?

   
 
 автор: DEM   (04.11.2006 в 01:57)   письмо автору
 
   для: BunK3R_r   (04.11.2006 в 01:55)
 

Это в категорию по Рег. Выражениям :)... а вообще вопрос интересный, жаль незнаю ответа :(

   
 
 автор: ec_stasis   (04.11.2006 в 02:50)   письмо автору
 
   для: BunK3R_r   (04.11.2006 в 01:55)
 

Используй preg_match_all() - их отличие как раз в том, что preg_match() прекращает работу после того как нашел первое совпадение с шаблоном.

[поправлено модератором]

   
 
 автор: BunK3R_r   (05.11.2006 в 15:20)   письмо автору
 
   для: BunK3R_r   (04.11.2006 в 01:55)
 

помогите плз примером...

   
 
 автор: cheops   (05.11.2006 в 15:29)   письмо автору
 
   для: BunK3R_r   (05.11.2006 в 15:20)
 

Вы можете поступить следующим образом
<? 
echo "<table border=\"0\" align=center>\n"
preg_match_all("/(<td style=)([^<]*)/i"file_get_contents("http://сайт.ru/"), $arr); 
for(
$i 0$i count($arr[2]); $i++)
{
  echo 
"<td style=".$arr[2][$i]; 
  echo 
"</td></tr> \n"
  echo 
"</table>\n"
}
?>

   
 
 автор: BunK3R_r   (05.11.2006 в 15:56)   письмо автору
 
   для: cheops   (05.11.2006 в 15:29)
 

а можно сделать что б скрипт искал от:
color:#8080FF">xLamoS*
и до тэга:
</tr>
вот так вот:
style="color:#8080FF">xLamoS*</td>
<td align=center>76
</td>
<td colspan="2" align=center></td>
<td align=right>303
/
10

   
 
 автор: cheops   (05.11.2006 в 21:48)   письмо автору
 
   для: BunK3R_r   (05.11.2006 в 15:56)
 

Да, для этого скрипт следует исправить следующим образом
<?  
echo "<table border=\"0\" align=center>\n";  
preg_match_all("/(<td style=)(.*?)</tr>/i"file_get_contents("http://сайт.ru/"), $arr);  
for(
$i 0$i count($arr[2]); $i++) 

  echo 
"<td style=".$arr[2][$i];  
  echo 
"</td></tr> \n";  
  echo 
"</table>\n";  

?>

   
 
 автор: BunK3R_r   (06.11.2006 в 02:29)   письмо автору
 
   для: cheops   (05.11.2006 в 21:48)
 

вы уверены что так? =)
/(<td style=)(.*?)</tr>/i
может
/(<td style=)(.*?)<\/tr>/i
хотя в обоих случаях результата 0 =((

   
 
 автор: kasmanaft   (06.11.2006 в 06:03)   письмо автору
 
   для: BunK3R_r   (06.11.2006 в 02:29)
 

Попробуйте добавить модификатор " s "

/(<td style=)(.*?)<\/tr>/is

   
 
 автор: cheops   (06.11.2006 в 11:40)   письмо автору
 
   для: BunK3R_r   (06.11.2006 в 02:29)
 

Кстати говоря да, действительно, без модификатора s не должно работать
<?   
echo "<table border=\"0\" align=center>\n";   
preg_match_all("/(<td style=)(.*?)</tr>/is"file_get_contents("http://сайт.ru/"), $arr);   
for(
$i 0$i count($arr[2]); $i++)  
{  
  echo 
"<td style=".$arr[2][$i];   
  echo 
"</td></tr> \n";   
  echo 
"</table>\n";   
}  
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования