Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Блок текста, содержащий теги <a ....>, <img...> и <br />

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
hippp
Отправлено: 26 Июня, 2010 - 18:14:24
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




Нужно вытащить блок многострочного текста между любыми двумя тегами. При этом этот текст может содержать в себе теги <a ....>, <img...> и <br />. Их надо вытащить вместе с текстом.

Вот пример (то что нужно вытащить помечено красным):

<div>Первая строка<br />
Вторая строка<br />
<a href="http://www.ooo.ru> Слово </a>
<img src="http://www.ooo.ru>
Последняя строка
</div>

Я написал выражение, но оно не захватывает все, что надо. Вы не могли бы подправить его:

#>(?: ((?!>)|<a[^>]*>|</a>|<img[^>]*>|<br />).)+<#mUsi
 
 Top
sozdatel
Отправлено: 26 Июня, 2010 - 18:58:23
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июнь 2010  
Откуда: Москва


Помог: 0 раз(а)




Я напишу позже своё решение этого вопроса, делал вчера тоже самое и получилось =) Радость а если хочешь сам посмотри функцию http://www[dot]poiu[dot]ru/functions/ind[dot][dot][dot]eg-match-all[dot]htm

PHP:
скопировать код в буфер обмена
  1. preg_match_all ("|<[^>]+>(.*)</[^>]+>|U",
  2.     "<b>example: </b><div align=left>this is a test</div>",
  3.     $out, PREG_PATTERN_ORDER);
  4. print $out[0][0].", ".$out[0][1]."\n";
  5. print $out[1][0].", ".$out[1][1]."\n"

Этот пример выведет:
CODE (htmlphp):
скопировать код в буфер обмена
  1. <b>example: </b>, <div align=left>this is a test</div>
  2. example: , this is a test

Таким образом, $out[0] - массив из строк, соответствующих всему шаблону, а $out[1] содержит массив строк, заключенных между тегами.

Мне это помогло и всё получилось как нужно.
 
 Top
JustUserR
Отправлено: 26 Июня, 2010 - 19:07:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




hippp пишет:
Я написал выражение, но оно не захватывает все, что надо. Вы не могли бы подправить его:
Если у вас внутри тега не содержится вложенных тегов с таким же именем то достаточно просто использовать шаблон с нежадными квантификаторами или модификатором /U - иначе как вариант можно обработать строку с помощью рекурсивной функции и дать каждому из тегов уникальный номер типа tag[N] с соответствующей шифровкой - после чего уже можно проводить полноценный разбор регулярными выражениями
Функция просмотра вперед и назад конечно являются полезными - но по умолчанию не применяются для рекурсивной обработки произольных вложенных тегов - только со специальной функцией обратного вызова


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
hippp
Отправлено: 28 Июня, 2010 - 16:52:37
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2010  


Помог: 0 раз(а)




sozdatel пишет:
Я напишу позже своё решение этого вопроса, делал вчера тоже самое и получилось

Sozdatel, если не сложно, поделись своим решинием плиз. Пересмотрел кучу всего, но пока не выходит то, что нужно.
 
 Top
JustUserR
Отправлено: 28 Июня, 2010 - 16:58:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




hippp пишет:
Пересмотрел кучу всего, но пока не выходит то, что нужно.
Если у вас не имеется вложенных тегов то достаточно простого нежадного квантификатора - можно использовать ранжированные нежадные квантификаторы типа {A,B}? для указания минимальной и макисмальной длины выбираемого фрагмента текста


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Joo
Отправлено: 30 Июня, 2010 - 10:58:30
Post Id



Гость


Покинул форум
Сообщений всего: 99
Дата рег-ции: Нояб. 2009  
Откуда: Казахстан


Помог: 1 раз(а)




hippp пишет:
Sozdatel, если не сложно, поделись своим решинием плиз. Пересмотрел кучу всего, но пока не выходит то, что нужно.

Где то в соседней теме я выкладывал пример парсинга блоков, с вложенными тегами.


-----
"Им будет не просто, тем кто полагается на истину авторитета, вместо ​того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог
 
 Top
JustUserR
Отправлено: 01 Июля, 2010 - 00:57:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Joo пишет:
Где то в соседней теме я выкладывал пример парсинга блоков, с вложенными тегами.
Данный вопрос обсуждался в одной из тем по регулярным выражениям и конечное решение было предложено автором здесь http://forum.php.su/topic.php?fo...88036#1276788036
Однако в исходной задаче требуется выборка из содержимого тегов <div> простого текста и некоторого ограниченного набора тегов - часть из которых не может быть вложенными в принципе поскольку они являются самозакрывающимися тегами а другие попросту не используются в такой схеме Поэтому для решения в данном случае можно использовать обычный нежадный шаблон регулярного выражения для выборки текста - и удаления всех остальные тегов вторичным регуляным выражением или функцией strip_tags


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB