Сведения о вопросе

Faridun

02:39, 6th August, 2020

Теги

HTML   Парсинг    

Парсинг идущих друг за другом тегов?

Просмотров: 405   Ответов: 4

Понадобилось сделать объединение идущих друг ха другом тегов img в один блок, который с помощью javascript превратится в галерею. Добавить один img в блок несложно — preg_replace тут сработает. А вот как выделить в отдельный блок несколько подряд идущих тегов?


Допустим, есть такой код:
<font color="black"><font color="#0000ff">&lt;</font><font color="#800000">img</font> <font color="#ff0000">src</font><font color="#0000ff">=&quot;image1.jpg&quot;</font> <font color="#ff0000">alt</font><font color="#0000ff">=&quot;&quot;</font> <font color="#0000ff">/&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">img</font> <font color="#ff0000">src</font><font color="#0000ff">=&quot;image2.jpg&quot;</font> <font color="#ff0000">alt</font><font color="#0000ff">=&quot;&quot;</font> <font color="#0000ff">/&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">img</font> <font color="#ff0000">src</font><font color="#0000ff">=&quot;image3.jpg&quot;</font> <font color="#ff0000">alt</font><font color="#0000ff">=&quot;&quot;</font> <font color="#0000ff">/&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">p</font><font color="#0000ff">&gt;</font>eewrwerr<font color="#0000ff">&lt;/</font><font color="#800000">p</font><font color="#0000ff">&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">div</font><font color="#0000ff">&gt;</font>qweqweqwe<font color="#0000ff">&lt;/</font><font color="#800000">div</font><font color="#0000ff">&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">img</font> <font color="#ff0000">src</font><font color="#0000ff">=&quot;image4.jpg&quot;</font> <font color="#ff0000">alt</font><font color="#0000ff">=&quot;&quot;</font> <font color="#0000ff">/&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">p</font><font color="#0000ff">&gt;</font>eewrwerr<font color="#0000ff">&lt;/</font><font color="#800000">p</font><font color="#0000ff">&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">img</font> <font color="#ff0000">src</font><font color="#0000ff">=&quot;image5.jpg&quot;</font> <font color="#ff0000">alt</font><font color="#0000ff">=&quot;&quot;</font> <font color="#0000ff">/&gt;</font><br/>
<font color="#0000ff">&lt;</font><font color="#800000">img</font> <font color="#ff0000">src</font><font color="#0000ff">=&quot;image6.jpg&quot;</font> <font color="#ff0000">alt</font><font color="#0000ff">=&quot;&quot;</font> <font color="#0000ff">/&gt;</font></font><br/>
<br/>
<font color="gray">* This source code was highlighted with <a href="http://virtser.net/blog/post/source-code-highlighter.aspx"><font color="gray">Source Code Highlighter</font></a>.</font>



image4.jpg как раз в данном случае и не нужен, т.к. за ним не идёт другой тег img. А нужно получить 2 списка тегов img: с изображениями image1.jpg, image2.jpg, image3.jpg и image5.jpg, image6.jpg


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



  Сведения об ответе

+-*/

14:00, 3rd August, 2020

Я не знаком с особенностями регэкспов в PHP, но вроде так:
((?:<img.*[^>]/>\s?){2,})
Проверку с Вашим примером проходит.


  Сведения об ответе

+-*/

22:52, 17th August, 2020

Ловите плюс за перфекционизм и заботу о пользователях :-)


  Сведения об ответе

VERSUION

05:03, 26th August, 2020

DOM-методы?


  Сведения об ответе

VCe znayu

05:39, 27th August, 2020

Вы не можете парсить [X]HTML регекспами. Потому что HTML не может быть распарсен регекспами. Регекспы — не инструмент для вменяемого парсинга HTML. [...]


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться