PHP.SU

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


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

> Без описания
antobra
Отправлено: 27 Апреля, 2018 - 22:38:45
Post Id


Посетитель


Покинул форум
Сообщений всего: 323
Дата рег-ции: Окт. 2010  


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




Приветствую!

Подскажите, как решить такую задачку с помощью регулярных выражений.

Имеем обычный HTML код любой из страниц сети:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <body>
  3. /* some code */
  4. <div>
  5. <p>Text text text <a href="url">more</a></p>
  6. <p>Another one text without URL</p>
  7. </div>
  8. <ol>
  9. <li><a href="url2">Value 1</a> is important value la-la-la</li>
  10. <li>Value 2 - it has not any links and it so sad</li>
  11. <li>Value 3 - there is no description but you can <a href="url3">add</a></li>
  12. </ol>
  13. <div>Some text in DIV</div>
  14. /* some code */
  15. </body>
  16.  


Задача: получить содержимое каждого тега из этого списка: <p><li><div><td><br><blockquote><dd>
Можно заметить, что некоторые теги из этого списка вложены в другие. В этом вся задача.

Мое регулярное
PHP:
скопировать код в буфер обмена
  1. preg_match_all ( '#(<p.?>(.+)</p>)|(<li.?>(.+)</li>)|(<div.?>(.+)</div>)|(<td.?>(.+)</td>)|(<blockquote.?>(.+)</blockquote>)|(<dd.?>(.+)</dd>)#isU', strip_tags ( $text, '<a><p><li><div><td><br><blockquote><dd>' ), $return );

выдает следующее:
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.             [0] => <div>
  4. <p>Text text text <a href="url">more</a></p>
  5. <p>Another one text without URL</p>
  6. </div>
  7.             [1] => <li><a href="url2">Value 1</a> is important value la-la-la</li>
  8.             [2] => <li>Value 2 - it has not any links and it so sad</li>
  9.             [3] => <li>Value 3 - there is no description but you can <a href="url3">add</a></li>
  10.             [4] => <div>Some text in DIV</div>
  11.         )
  12.  
  13.  


А необходимо:

PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.             [0] => <p>Text text text <a href="url">more</a></p>
  4.             [1] => <p>Another one text without URL</p>
  5.             [1] => <li><a href="url2">Value 1</a> is important value la-la-la</li>
  6.             [2] => <li>Value 2 - it has not any links and it so sad</li>
  7.             [3] => <li>Value 3 - there is no description but you can <a href="url3">add</a></li>
  8.             [4] => <div>Some text in DIV</div>
  9.         )
  10.  


То есть необходимо самое последнее совпадение внутри последнего тега. Сейчас так получается, что регулярное встречает первое знакомое и все внутренние совпадения игнорирует.

* Тег <a> я посчитал важным отметить, тк он будет нужен после этой регулярки (но не в рамках этой задачи).


Отредактировано модератором: Строитель, 28 Апреля, 2018 - 12:14:35
 
 Top
Строитель Модератор
Отправлено: 28 Апреля, 2018 - 12:23:57
Post Id



Участник


Покинул форум
Сообщений всего: 1308
Дата рег-ции: Февр. 2014  
Откуда: Украина


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




antobra
Спойлер (Отобразить)
 
 Top
antobra
Отправлено: 28 Апреля, 2018 - 13:35:48
Post Id


Посетитель


Покинул форум
Сообщений всего: 323
Дата рег-ции: Окт. 2010  


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




Огромное спасибо. Все оказалось очень просто! Надеюсь, эта регулярное поможет другим, кто ищет такое же решение)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Регулярные выражения »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB