Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как извлечь содержимое между тегами body
 
 автор: Adj   (13.03.2010 в 15:10)   письмо автору
 
 

Необходимо написать парсер.
С помощью рег. выпажения
<body>(.*)<\/body>

получить содержимое не получается. Как правильно составить рег. выражение?
И еще хотел поинтересовать есть ли программы для работы с РВ?

  Ответить  
 
 автор: Brothersssddsss   (14.03.2010 в 01:04)   письмо автору
 
   для: Adj   (13.03.2010 в 15:10)
 

Получить содержимое между тегами <body> можно так:

$text = "<body>текст</body>";

preg_match("/(<body>)(.*)(<\/body>)/", $text, $sovpad);

echo $sovpad[0];

  Ответить  
 
 автор: baston   (14.03.2010 в 08:13)   письмо автору
 
   для: Adj   (13.03.2010 в 15:10)
 

По программам:
Под FireFox есть плагин:
https://addons.mozilla.org/ru/firefox/addon/2077
А также есть пара неплохих онлайн-конструкторов:
http://www.regexpal.com/
http://myregexp.com/
http://www.pcre.ru/eval/

  Ответить  
 
 автор: baston   (14.03.2010 в 10:01)   письмо автору
 
   для: Adj   (13.03.2010 в 15:10)
 

Можно еще такой паттерн использовать:
#<(body>)(.*?)(</\1)#xi

Тогда мы игнорируем пробелы в начале и конце строки, регистр, и используем в качестве ограничения результат из первого кармана - (</\1).

  Ответить  
 
 автор: Adj   (14.03.2010 в 10:28)   письмо автору
 
   для: Adj   (13.03.2010 в 15:10)
 

(<body>)(.*)(<\/body>)
<(body>)(.*?)(</\1)

Ничем не отличаются от мною приведенного шаблона, кроме жадности.
Такой шаблон <body>(.*)<\/body> не срабатывает если между тегами есть \r\n, в Unix не пробовал.
<body>
\r\n<h1>Заголовок</h1>
\r\n
\r\n<p>Текст</p>
\r\n</body>

в данном варианте содержимое не находиться, но когда удаляешь \r\n, все срабатывате
<body><h1>Заголовок</h1><p>Текст</p></body>

Вот такой паттерн тоже не работает: <body>(\s|.)*<\/body>

  Ответить  
 
 автор: Красная_шляпа   (18.03.2010 в 23:36)   письмо автору
 
   для: Adj   (14.03.2010 в 10:28)
 

"/<body>(.*)<\/body>/uis"

  Ответить  
 
 автор: Красная_шляпа   (18.03.2010 в 23:38)   письмо автору
 
   для: Красная_шляпа   (18.03.2010 в 23:36)
 

u убери если не utf-8

  Ответить  
 
 автор: Adj   (19.03.2010 в 22:36)   письмо автору
 
   для: Красная_шляпа   (18.03.2010 в 23:36)
 

Спасибо! Работает!

  Ответить  
 
 автор: skinny   (20.03.2010 в 19:11)   письмо автору
 
   для: Adj   (19.03.2010 в 22:36)
 

<body(.*?)>(.*?)<\/body>

  Ответить  
 
 автор: heed   (20.03.2010 в 21:43)   письмо автору
 
   для: skinny   (20.03.2010 в 19:11)
 

(.*?) первое незачем брать в скобки если не нужно то что туда попадёт
(.*?) второе будет работать медленнее чем (.*), но если <\/body> две штуки выберет только до первого <\/body>

иногда лучше два раза отрезать с краёв , чем выдирать середину. Не занимает лишней памяти.

  Ответить  
 
 автор: Adj   (21.03.2010 в 11:12)   письмо автору
 
   для: skinny   (20.03.2010 в 19:11)
 

Я думаю вот так будет лучше
<body[^>]*>(.*?)<\/body>

  Ответить  
 
 автор: Usta   (25.03.2010 в 12:40)   письмо автору
 
   для: Adj   (21.03.2010 в 11:12)
 

Вот замечательная функция php tidy_get_body

  Ответить  
 
 автор: Adj   (28.03.2010 в 20:09)   письмо автору
 
   для: Usta   (25.03.2010 в 12:40)
 

Спасибо, не знал!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования