LINUX.ORG.RU
ФорумTalks

[php][regexp] Что за фигня?

 ,


0

0
Пишу тупой парсер, нужно взять html-ку и выделить из неё title и body

preg_match('#<title>(.+)</title>#i', $html, $p)

Возращает 1. Почему же

preg_match('#<title>(.+)</title>#is', $html, $p)

возвращает 0?


Ответ на: комментарий от Deleted
судя по мануалу - два лимита для PRCE есть, но они из другой оперы.

хрен с ним, уже сделал через stripos и substr. Чувствую себя индусом :D

Ximik
() автор топика
> preg_match('#<title>(.+)</title>#i', $html, $p)
> Возращает 1. Почему же

> preg_match('#<title>(.+)</title>#is', $html, $p)

> возвращает 0?


Лучше таким образом:

preg_match('#<title>(.+?)</title>#is', $html, $p)

Плюс к этому лимиты поменять (при необходимости):

ini_set('pcre.backtrack_limit', 2000000);
ini_set('pcre.recursion_limit', 2000000);
ini_set('memory_limit', '16M');
kajematez
()
Ответ на: комментарий от Ximik
Мысли позитивнее - чувствуй себя оптимизатором. Через stripos и substr реально будет работать быстрее и жрать меньше памяти.
Ramen ★★★★
()
Ответ на: комментарий от Ximik
> Как только страница в ~100Кб - всё.

Ну тык:

pcre.backtrack_limit 100000 PHP_INI_ALL Available since PHP 5.2.0.
pcre.recursion_limit 100000 PHP_INI_ALL Available since PHP 5.2.0.

kajematez
()
Вот так работает:
"|<title>([^<]+)</title>|i"
Так ему не приходится просматривать весь файл, в виду своей жадности, а только к закрывающему тегу.
urxvt ★★★★★
()
preg_match для таких целей не подходит, нужен DOMDocument, так как тега <body> может не существовать вообще и это будет абсолютно валидный html.
RommeDeSerieux
()
Ответ на: комментарий от RommeDeSerieux
> preg_match для таких целей не подходит, нужен DOMDocument, так как тега <body> может не существовать вообще и это будет абсолютно валидный html.

ну валидностью на большинстве страниц и не пахнет.

А как без body может быть валидным? Вроде бы обязательный тег

Ximik
() автор топика
Ответ на: комментарий от isden
> видимо имелось ввиду <title>

ну тогда и парсить смысла-то нет.

Ximik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.