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
Форумы портала PHP.SU :: Версия для печати :: Вырезать внутренность тега, когда внутри еще теги
Форумы портала PHP.SU » PHP » Регулярные выражения » Вырезать внутренность тега, когда внутри еще теги

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

1. antobra - 27 Апреля, 2018 - 22:38:45 - перейти к сообщению
Приветствую!

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

Имеем обычный 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> я посчитал важным отметить, тк он будет нужен после этой регулярки (но не в рамках этой задачи).
2. Строитель - 28 Апреля, 2018 - 12:23:57 - перейти к сообщению
antobra
Спойлер (Отобразить)
3. antobra - 28 Апреля, 2018 - 13:35:48 - перейти к сообщению
Огромное спасибо. Все оказалось очень просто! Надеюсь, эта регулярное поможет другим, кто ищет такое же решение)

 

Powered by ExBB FM 1.0 RC1