|
|
|
| есть скрипт
<?php
set_time_limit(1000);
$file = file("html.txt");
if(!file)
{
echo("Ошибка открытия файла");
}
else {
$text = implode($file);
preg_match_all("|<[^>]+>(.*)</[^>]+>|U", $text, $out);
for ($i=0; $i< count($out[0]); $i++) {
echo "<br>";
echo $out[1][$i] . "\n";
}
}
?>
|
есть файл html.txt такого вида
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810 class=a>136</a> | <a
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=811 class=a>136</a> | <a
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=812 class=a>136</a> | <a
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=813 class=a>136</a> | <a
|
голову сломал , подскажите как выбрать все ссылки, чтоб получить такой список
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=811
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=812
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=813
... | |
|
|
|
|
|
|
|
для: adminn
(17.01.2010 в 11:46)
| | скажите, а зачем здесь рег.выражения?
Вам хватит substr (+strpos) | |
|
|
|
|
|
|
|
для: ddhvvn
(17.01.2010 в 13:42)
| | не получается , если я сделаю так
<?
$text = "href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810 class=a>136</a> | <a ";
$string = substr($text, 5);
echo ();
?>
|
вернет как я понял
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810 class=a>136</a> | <a
а мне нужно
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810
и ссылки могут быть такие
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=8
http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810
т.е разной длины
подскажите как сделать , я не могу сообразить , желательно с примерами | |
|
|
|
|
|
|
|
для: adminn
(17.01.2010 в 23:39)
| | Если без премудростей, то так:
<?php
$text = 'href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=810 class=a>136</a> | <a
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=811 class=a>136</a> | <a
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=812 class=a>136</a> | <a
href=http://site.ru/cgi-bin/wall/show.pl?razdel=/files/home.conf?&list=813 class=a>136</a> | <a ';
preg_match_all("|href=(.*) class=a>136</a>|U", $text, $out);
for ($i=0; $i< count($out[0]); $i++) {
echo "<br>";
echo $out[1][$i] . "\n";
}
?>
|
| |
|
|
|
|
|
|
|
для: Diplex
(18.01.2010 в 01:11)
| | спасибо разобрался , но проблема в то , что у меня class=a>136</a> всегда разный , т.е 136,137.... с одного до 20000 | |
|
|
|
|
|
|
|
для: adminn
(20.01.2010 в 03:03)
| | Можно сократить это:
preg_match_all("|href=(.*) class=a>136</a>|U", $text, $out);
|
на это:
preg_match_all("|href=(.*) class=a>|U", $text, $out);
|
или это:
preg_match_all("|href=(.*) class=a>(.*)</a>|U", $text, $out);
|
| |
|
|
|
|
|
|
|
для: adminn
(17.01.2010 в 23:39)
| | А открыть описание функций рука не поднимается?
<?php
...
$text = substr($text,5);
$text = substr($text, 0, strpos($text, ' '));
...
?>
|
| |
|
|
|
|
|
|
|
для: ddhvvn
(18.01.2010 в 13:35)
| | не подойдет т.к если сохранять список и заливать его на сервер в тхт , он получается в одну строку как не крути т.е
<a href=УРЛ&list=18 class=a>4</a> | <a href=УРЛ2&list=18 class=a>5</a> ..... | |
|
|
|
|
|
|
|
для: adminn
(17.01.2010 в 11:46)
| | Непонятно только зачем читать содержимое файла функцией file сливать потом все данные в одну строку, и жаловаться что весь файл объеденён в одну строку.
Вам уже не раз ответили, но можете попробовать еще так.
<?php
set_time_limit(1000);
$file = file_get_contents("html.txt");
if(!file)
{
die("Ошибка открытия файла");
}
//Находим сам Url и текст ссылки, возможно понадобится позже
preg_match_all("|href=(.*)\s.*[^>]+>(.*)</[^>]+>|U", $file, $out, PREG_SET_ORDER);
if(!isset($out[0][1]))
die('ничего подходящего не нашли');
foreach($out as $value)
{
echo "Ссылка ".$value[1]." Текст ссылки ".$value[2]." \n<br/>";
}
?>
|
| |
|
|
|
|
|
|
|
для: Слух
(20.01.2010 в 08:43)
| | >Непонятно только зачем читать содержимое файла функцией file сливать потом все данные в одну строку, и жаловаться что весь файл объеденён в одну строку.
implode(file()) не объединяет строки в одну. | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2010 в 09:05)
| | Мне прям стало интересно что же он тогда сделает если не объединит строки в одну?
http://ua2.php.net/manual/en/function.implode.php
http://ua2.php.net/manual/en/function.file.php
Решил все же перепроверить
<?
$body = file_get_contents('http://softtime.ru/');
echo gettype($body)." ".strlen($body)." ".str_word_count($body)."<br>";
$body = file('http://softtime.ru/');
echo gettype($body)." ".count($body)."<br>";
$body = implode($body);
echo gettype($body)." ".strlen($body)." ".str_word_count($body)."<br>";
?>
|
| |
|
|
|
|
|
|
|
для: Слух
(20.01.2010 в 10:33)
| | Если под строкой понимать цепочку байт - конечно же объединит.
Если - строку текста, ограниченную разделителем строк LF, то эти разделители никуда не уберутся, и в результате окажется построчное про\едставление текста. | |
|
|
|
|
|
|
|
для: Trianon
(20.01.2010 в 13:27)
| | Под строкой я понимаю тип переменной в php.
Придираться к словам не хорошо, вы сегодня не выспались? | |
|
|
|
|
|
|
|
для: Слух
(20.01.2010 в 14:05)
| | Этот "недосып" уже давно продолжается :) Жалко, что мы потеряли нашего доброго Trianon'a :) | |
|
|
|