С нами с 05.07.03
Сообщения: 364
Рейтинг: 68
|
Добавлено: 25/12/04 в 21:50 |
Собственно проблемма:
Есть html-страница, в которой где-то в середине есть блок, заключенный между комментариями:
<!--BEGIN_NEW_LINKS-->
...
<!--END_NEW_LINKS-->
Задача: выцепить этот блок.
Почитав мануалы, стал экспериментировать с регулярными выражениями, но, поскольку вы видите этот пост, у меня нихрена не получилось ;(
последнее, на чем остановился:
preg_match("/(?<=<!--BEGIN_NEW_LINKS-->)\S*(?<=<!--END_NEW_LINKS-->)/", $buf, $matches)
Подскажите плиз, что не так?
И еще интересует момент: как правильно задавать конкретную строку для поиска? (в нашем случае <!--BEGIN_NEW_LINKS--> и END)
|
|
|
|
С нами с 06.03.03
Сообщения: 1650
Рейтинг: 1096
|
Добавлено: 25/12/04 в 22:12 |
можно и проще:
Код: |
$buf='some_text';// << здесь твой код
$sp = strpos($buf,'<!--BEGIN_NEW_LINKS-->');
if($sp===false) die('not found');
$ep = strpos($buf,'<!--END_NEW_LINKS-->');
if($ep===false) die('not found');
$ep += strlen('<!--END_NEW_LINKS-->');
$result = substr($buf,$sp,$ep-$sp);
|
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 25/12/04 в 22:31 |
вместо скобок < и > попробуй \< и \>
это спецсимволы и их надо анекейпать.
могу ошибаться, но кажется нужно анескейпать только одну скобку.
попробуй разные варианты.
вообще, если имеются траблы с регекспами (а это немудрено в случае сложных регекспов), упрости вариант и потихонечку его усложняй, пока не дойдешь то требуемого.
|
|
|
|
С нами с 05.07.03
Сообщения: 364
Рейтинг: 68
|
Добавлено: 25/12/04 в 22:47 |
ок, спасибо.. буду пробовать.
2webboxxx: спасибо, конечно. но в конечном итоге нужно все будет делать с помощью регулярных выражений, так как обрабатываемых страниц будет много, с разными идентификаторами начала и конца нужного блока, + нужно будет по шаблонам парсить сами блоки, которые выцепляются..
по ходу еще вопрос возник:
как через fscockopen открыть url/page.html ? т.е. если писать:
$fp = fsockopen('www.yahoo.com', 80, $errno, $errstr, 30);
то все нормально проходит. если же:
$fp = fsockopen('www.yahoo.com/ 1.html', 80, $errno, $errstr, 30);
- то уже не получается. в принципе логично, так как php по урлу вызывает get_host_by_name() и только потом открывает соединение.
сосбтвенно вопрос: есть ли методы открыть урл+документ используя fsockopen?
если нет, то еще вопрос:
можно воспользоваться альтернативным методом:
$fp = fopen("http://www.yahoo.com/1.html", "r");
но в данном случае интересует подсовывание своего HTTP-хидера.
в общем всех нещадно плюсую!
|
|
|
|
/dev/awm
С нами с 05.02.04
Сообщения: 2300
Рейтинг: 1127
|
Добавлено: 25/12/04 в 22:53 |
естественно fsockopen передавать url - это тоже самое что складывать яблоки с валенками.
судя из названия функции - это открытие СОКЕТА, т.е. нжен адрес или имя хоста.
вот пример из моих скриптов (нужно поправить):
Код: |
$split = parse_url($url);
$request = "GET ".(isset($split["path"])?$split["path"]:"")."?".(isset($split["query"])?$split["query"]:"")." HTTP/1.0\r\n";
$request .= "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)\r\n";
$request .= "Host: ".$split["host"]."\r\n";
$request .= "Connection: Close\r\n\r\n";
$full_string = "";
$fp = fsockopen ($split["host"], 80);
if($fp)
{
fputs ($fp, $request);
while (!feof($fp))
$full_string .= fgets ( $fp, 4000 );
fclose ($fp);
} else
return false;
|
там же можно и другие хидеры указать.
|
|
|
|
С нами с 05.07.03
Сообщения: 364
Рейтинг: 68
|
Добавлено: 25/12/04 в 23:00 |
JpS, сымаю кепку!
Спасибо!!!
|
|
|
|
Текстовая реклама в форме ответа Заголовок и до четырех строчек текста Длина текста до 350 символов Купить рекламу в этом месте! |