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

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

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

 

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

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

тема: Выбрать весь текст в тегах <p>
 
 автор: warlocke13   (27.01.2012 в 10:47)   письмо автору
 
 

Всем привет. Вот попал в засаду:
есть следующая разметка страницы:

<div id="id1">
 <p> TEXT </p>
 <div id="image">. тут еще куча вложенных тегов и есть тег <p>Текст</p>..</div>
 <p> <strong> TEXT </strong> </p>
 <p> </p>
 <p> TEXT </p>
 <p>TEXT </p>
 <p>TEXT </p>
.... может быть разное количество тегов <p> </p>
 <p> </p>
</div>


Вот надо составить регулярку которую брала бы текст, вот я пытался что-то такое сделать:

<div id=\"id1\">\\s*+<p>(.*) 
- так берет текст только первого тега <p>- точнее весь текст в тегах <p></p> до тега <div>, если я пишу так:
 <div id=\"image\">*.*</div>\\s*+<p>(.*) 
- так берет весь текст в тегах <p></p> после тега <div id="image">, но вот засада, если я напишу так:
<div id=\"id1\">\\s*+<p>(.*)</p>\\s*+<div id=\"image\">*.*</div>\\s*+<p>(.*) 
- то я вообще ничего не получаю :(.
Буду благодарен за любую помощь. Спасибо.

  Ответить  
 
 автор: Tjulen   (29.01.2012 в 10:04)   письмо автору
 
   для: warlocke13   (27.01.2012 в 10:47)
 

Скорее всего нельзя написать регулярку если не знаешь сколько тегов <p>. нужно использовать средства языка, например на ruby это может быть сделано так:

#!/usr/bin/env ruby
#coding:utf-8
text1 = <<-EOF
<div id="id1"> 
 <p> TEXT </p> 
 <div id="image">. тут еще куча вложенных тегов и есть тег <p>Текст</p>..</div> 
 <p> <strong> TEXT </strong> </p> 
 <p> </p> 
 <p> TEXT </p> 
 <p>TEXT </p> 
 <p>TEXT </p> 
.... может быть разное количество тегов <p> </p> 
 <p> </p> 
</div> 
EOF
pattern_html = /<p>(.*)<\/p>/
res=""
text1.gsub(pattern_html) do
    |str|    
    res+=str[3..-5]# прибавить без <p> в начале и <\p> в конце
end
puts res

  Ответить  
 
 автор: Sfinks   (29.01.2012 в 10:19)   письмо автору
 
   для: warlocke13   (27.01.2012 в 10:47)
 

Чет не пойму в чем проблема. Почему 2 дня нет ответа.....
<pre><?php
  $html 
= <<<HTML
<div id="id1">
 <p> TEXT </p>
 <div id="image">. тут еще куча вложенных тегов и есть тег <p>Текст</p>..</div>
 <p> <strong> TEXT </strong> </p>
 <p> </p>
 <p> TEXT </p>
 <p>TEXT </p>
 <p>TEXT </p>
.... может быть разное количество тегов <p> </p>
 <p> </p>
</div>
HTML;

  
$pattern "#<p>(.*?)</p>#s";
  
preg_match_all($pattern,$html,$out);
  
print_r($out);

?></pre>
результат:
Array
(
    [0] => Array
        (
            [0] => <p> TEXT </p>
            [1] => <p>Текст</p>
            [2] => <p> <strong> TEXT </strong> </p>
            [3] => <p> </p>
            [4] => <p> TEXT </p>
            [5] => <p>TEXT </p>
            [6] => <p>TEXT </p>
            [7] => <p> </p>
            [8] => <p> </p>
        )

    [1] => Array
        (
            [0] =>  TEXT 
            [1] => Текст
            [2] =>  <strong> TEXT </strong> 
            [3] =>  
            [4] =>  TEXT 
            [5] => TEXT 
            [6] => TEXT 
            [7] =>  
            [8] =>  
        )

)
Или нужно что-то другое???

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

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