[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выбрать все теги td начиная с определенного
Spanch_Bob
имеется интернет страница, ниже привожу часть кода этой страницы

<tr class="hell strich">
<td
style="width:310px;"><a href="/en/freundschaftsspiele/startseite/pokalwettbewerb_FS.html" title="Freundschaftsspiele">Freundschaftsspiele</a></td>
<td
class="ac" style="width:55px;"><a href="#FS" title="Freundschaftsspiele">2</a></td>
<td
class="ac">-</td>
<td
class="ac">-</td>

<td
class="ac">1</td>
<td
class="ac">-</td>
<td
class="ac">-</td>
<td
class="ac">-</td>
<td
class="ac">-</td>
<td
class="ac">-</td>
<td
class="ac">-</td>
<td
class="ar">180</td>
</tr>

<tr
class="hell s10">
<td
class="ar">Total: </td>
<td
class="ac">22</td> 
<td class="ac">17</td>
<td
class="ac">-</td>
<td
class="ac">17</td>
<td
class="ac">1</td>
<td
class="ac">-</td>
<td
class="ac">-</td>

<td
class="ac">1</td>
<td
class="ac">-</td>
<td
class="ac">115</td>
<td
class="ar">1950</td>
</tr>



из этой страницы мне нужно выделить строки и записать их построчно в массив, то есть нужна только вот эта часть

<td class="ar">Total: </td>
<td
class="ac">22</td> 
<td class="ac">17</td>
<td
class="ac">-</td>
<td
class="ac">17</td>
<td
class="ac">1</td>
<td
class="ac">-</td>
<td
class="ac">-</td>

<td
class="ac">1</td>
<td
class="ac">-</td>
<td
class="ac">115</td>
<td
class="ar">1950</td>



Никак не могу догнать как это правильно сделать, у меня не получается записать как нужно построчно, может кто подсказать как это грамотно сделать, буду очень благодарен
[MOD]Давайте своим темам содержательные названия и выделяйте код тегами !Winston[/EX]



Спустя 2 минуты, 25 секунд (25.10.2011 - 17:50) bulgakov написал(а):
Попробуйте использовать функцию - file()

Спустя 8 минут, 37 секунд (25.10.2011 - 17:59) Spanch_Bob написал(а):
Цитата (bulgakov @ 25.10.2011 - 14:50)
Попробуйте использовать функцию - file()

дело в том что положение этих строчек на каждой странице разное, поэтому я пытался как то зацепится от строчек
<tr class="hell s10">
<td class="ar">Total:&nbsp;</td>
и записывать построчно до </tr> но у меня не получается как надо

Спустя 1 час, 10 минут, 44 секунды (25.10.2011 - 19:10) Xes написал(а):
preg_match_all('#(<tr class="hell s10">.*</tr>)#isuU', $tvoystrokatablitsa, $outarray);

Почитай про preg_match_all и будет понятно что есть что.

Спустя 13 минут, 41 секунда (25.10.2011 - 19:23) Winston написал(а):
Так ?
preg_match_all("#(<td class=\"a[rc]\">.*</td>)#iU", $str, $match);
echo '<pre>'.htmlspecialchars(print_r(array_unique($match[1]), 1)).'</pre>';

Спустя 9 минут, 46 секунд (25.10.2011 - 19:33) Spanch_Bob написал(а):
Цитата (Xes @ 25.10.2011 - 16:10)
preg_match_all('#(<tr class="hell s10">.*</tr>)#isuU', $tvoystrokatablitsa, $outarray);

Почитай про preg_match_all и будет понятно что есть что.

так я тоже побывал, все записывается в 0-ой элемент

Спустя 17 минут, 23 секунды (25.10.2011 - 19:51) Spanch_Bob написал(а):
Цитата (Winston @ 25.10.2011 - 16:23)
Так ?
preg_match_all("#(<td class=\"a[rc]\">.*</td>)#iU", $str, $match);
echo '<pre>'.htmlspecialchars(print_r(array_unique($match[1]), 1)).'</pre>';

такая конструкция тоже не подходит потому как для данной страницы определяется все верно, но если взять другую, которая немного отличается то уже не работает, но на всех страницах есть конструкция типа
<tr class="hell s10">
<td class="ar">Total: </td>
...
и заканчивается
</tr>

Спустя 19 минут, 29 секунд (25.10.2011 - 20:10) Winston написал(а):
А так
preg_match_all("#(<td( class=\"[^\"]*\")?>.*</td>)#iU", $str, $match);

Спустя 9 минут, 18 секунд (25.10.2011 - 20:19) Spanch_Bob написал(а):
Цитата (Winston @ 25.10.2011 - 17:10)
А так
preg_match_all("#(<td( class=\"[^\"]*\")?>.*</td>)#iU", $str, $match);

проблема в том, что на каждой странице разное кол-во этих тегов, поэтому мне именно нужно собирать эти теги начиная с <td class="ar">Total: </td>до этой строчки эти теги не интересуют, только так получится добиться фиксированных значений для каждой страницы

Спустя 1 час, 55 минут, 25 секунд (25.10.2011 - 22:15) Winston написал(а):
А так ?
preg_match_all("#(<td(?: class=\"[^\"]*\")?>.*</td>)#iU", $str, $match, PREG_PATTERN_ORDER, strpos($str, 'class="ar"'));
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';

Спустя 2 часа, 7 минут, 44 секунды (26.10.2011 - 00:22) Spanch_Bob написал(а):
Цитата (Winston @ 25.10.2011 - 19:15)
А так ?
preg_match_all("#(<td(?: class=\"[^\"]*\")?>.*</td>)#iU", $str, $match, PREG_PATTERN_ORDER, strpos($str, 'class="ar"'));
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';

та так вообще не работает, но если я правильно понял что делается то тоже не подойдет, можно ли как то указать с какой строки начать считывать шаблон? то есть можно составить так чтобы собирать теги <td> начиная после строчки <tr class="hell s10"> или <td class="ar">Total: </td> и заканчивать сбор до </tr>можно ли такой шаблон составить?

Спустя 4 минуты, 31 секунда (26.10.2011 - 00:27) Игорь_Vasinsky написал(а):
найди первое вхождение этой строки - все остальное в переменную, потом уж парсь.

Спустя 47 секунд (26.10.2011 - 00:28) Winston написал(а):
Вот, на твоем примере у меня все работает
Свернутый текст
$str = '<tr class="hell strich">
<td style="width:310px;"><a href="/en/freundschaftsspiele/startseite/pokalwettbewerb_FS.html" title="Freundschaftsspiele">Freundschaftsspiele</a></td>
<td class="ac" style="width:55px;"><a href="#FS" title="Freundschaftsspiele">2</a></td>
<td class="ac">-</td>
<td class="ac">-</td>

<td class="ac">1</td>
<td class="ac">-</td>
<td class="ac">-</td>
<td class="ac">-</td>
<td class="ac">-</td>
<td class="ac">-</td>
<td class="ac">-</td>
<td class="ar">180</td>
</tr>

<tr class="hell s10">
<td class="ar">Total: </td>
<td class="ac">22</td>
<td class="ac">17</td>
<td class="ac">-</td>
<td class="ac">17</td>
<td class="ac">1</td>
<td class="ac">-</td>
<td class="ac">-</td>

<td class="ac">1</td>
<td class="ac">-</td>
<td class="ac">115</td>
<td class="ar">1950</td>
</tr>'
;

preg_match_all("#(<td(?: class=\"[^\"]*\")?>.*</td>)#iU", $str, $match, PREG_PATTERN_ORDER, strpos($str, 'class="ar"'));
echo '<pre>'.htmlspecialchars(print_r($match, 1)).'</pre>';


Цитата (Spanch_Bob @ 26.10.2011 - 00:22)
та так вообще не работает,

Выложи сюда весь исходный код страницы в которой ты производишь поиск.
PS: Только спрячешь ее в теги [ more ] ... [ /more ]



Спустя 54 секунды Winston написал(а):
Результат
Свернутый текст
Array
(
[0] => Array
(
[0] => <td class="ar">Total: </td>
[1] => <td class="ac">22</td>
[2] => <td class="ac">17</td>
[3] => <td class="ac">-</td>
[4] => <td class="ac">17</td>
[5] => <td class="ac">1</td>
[6] => <td class="ac">-</td>
[7] => <td class="ac">-</td>
[8] => <td class="ac">1</td>
[9] => <td class="ac">-</td>
[10] => <td class="ac">115</td>
[11] => <td class="ar">1950</td>
)

[1] => Array
(
[0] => <td class="ar">Total: </td>
[1] => <td class="ac">22</td>
[2] => <td class="ac">17</td>
[3] => <td class="ac">-</td>
[4] => <td class="ac">17</td>
[5] => <td class="ac">1</td>
[6] => <td class="ac">-</td>
[7] => <td class="ac">-</td>
[8] => <td class="ac">1</td>
[9] => <td class="ac">-</td>
[10] => <td class="ac">115</td>
[11] => <td class="ar">1950</td>
)

)

Спустя 52 минуты, 1 секунда (26.10.2011 - 01:20) walerus написал(а):
Ну а если сделать как посоветовал bulgakov - использовать file();

Что то вроде:

<?php
$file_data = file('http://example.com/page.html');
$result_array = array();

$add = false;
foreach( $file_data as $line )
{
if ( trim( $line ) == '<tr class="hell s10">' )
$add = true; // Разрешили добавлять

if ( $add && trim( $line ) == '</tr>' )
$add = false; // запретили добавлять

if ( $add )
$result_array[] = trim( $line );
}

print_r($result_array);

/* Результат

Array
(
[0] => <td class="ar">Total: </td>
[1] => <td class="ac">22</td>
[2] => <td class="ac">17</td>
[3] => <td class="ac">-</td>
[4] => <td class="ac">17</td>

[5] => <td class="ac">1</td>
[6] => <td class="ac">-</td>
[7] => <td class="ac">-</td>
[8] =>
[9] => <td class="ac">1</td>
[10] => <td class="ac">-</td>

[11] => <td class="ac">115</td>
[12] => <td class="ar">1950</td>
)

*/


Спустя 4 минуты, 23 секунды (26.10.2011 - 01:24) Winston написал(а):
Ну как вариант smile.gif

Спустя 17 часов, 14 минут, 22 секунды (26.10.2011 - 18:39) Spanch_Bob написал(а):
ребята, спасибо вам большое за помощь=)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.