текст между тэгами

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

Ответить
supercelt
Сообщения: 5
Зарегистрирован: 27 окт 2009, 21:05

Здравствуйте! Помогите пожалуйста!
Нужно вот что:

Есть фраза "destroy shoes"
Нужно подставить её в поисковик, например вот так: somesite.ru/search.php?q=destroy shoes
Потом нужно с помощью пхп открыть эту страницу с результатами как текст. Ну это я знаю - fopen() и так далее
А вот дальше структура примерно такая:
Что открылось:
[HTML]
<html>
<head>
....
</head>
<body>
тут какие-то теги...
<table class="result">
<tr>
<td>А тут результаты поиска - 1</td>
</tr>
</table>
Тут какие-то дивы могут быть
<table class="result">
<tr>
<td>А тут результаты поиска - 2</td>
</tr>
</table>
Другие элементы
<table class="result">
<tr>
<td>А тут результаты поиска - 3</td>
</tr>
</table>
</body>
</html>
[/HTML]

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

[HTML]
<table class="result">
<tr>
<td>А тут результаты поиска - 1</td>
</tr>
</table>
[/HTML]

Соотв. остальные результаты тоже, короче опираясь на таблицы, у которых класс = result
Выцарапать надо как есть, то есть вместе с тэгами table
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Тут проще всего копать в сторону регулярных выражений
Примерно так: preg_match("!<table class=\"result\">/(.*?)<\/table>!", $file_text, $matches) - навскидку точнее не скажу, надо тестить, в уме я регэкспы плохо пишу. $file_text - текст, который мы парсим, $matches - массив, в котором будет все нужное.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
supercelt
Сообщения: 5
Зарегистрирован: 27 окт 2009, 21:05

Хыиуду писал(а):Тут проще всего копать в сторону регулярных выражений
Примерно так: preg_match("!<table class=\"result\">/(.*?)<\/table>!", $file_text, $matches) - навскидку точнее не скажу, надо тестить, в уме я регэкспы плохо пишу. $file_text - текст, который мы парсим, $matches - массив, в котором будет все нужное.
К сожалению не ищет, выводит только вот это:

Array
(
[0] => Array
(
)

)

Array
(
[0] => Array
(
)

)

Array
(
[0] => Array
(
)

)

Array
(
[0] => Array
(
)

)

Ещё пробовал вариант

Код: Выделить всё

preg_match_all('~<table class=\"result\">\s*<tr>\s*<td>[^\<]+<\/td>\s*<\/tr>\s*<\/table>~is', $contents, $out); 
Но он делает тоже самое
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Проверил. Проблема была в том, что в исходном тексте присутствуют непредвиденные переносы строк :)
$a=str_replace("\n", "", $file_text);
А теперь учтем, что из соображений удобочитаемости текст еще и отформатирован пробелами, так что учитываем еще их.
preg_match_all('/<table class="result"> *<tr> *<td>(.*?)<\/td> *<\/tr> *<\/table>/', $a, $matches);
Если форматирование текста происходило еще и с помощью табуляции, то каждое вхождение " *" надо заменить на [ \t]*
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить