Всем привет. Я новичок и только начинаю осваивать регулярки, но попалась задача которую надо решить и я уже голову сломал, пока что не получается. И помочь никто не может.
Задача для случая когда: в старых статьях (я в качестве CMS работаю с WP) где использовались img - обычная вставка изображений, но добавили новый код который оборачивает изображения в метатеги для shema.org и все это дело еще и обернули в figure.
Надо собрать порядок изображений в котором они стоят.
пример:
<img>
<img>
<figure><img> </figure>
<img>
При сборе должно получиться:
<img
<img
<figure
<img
Решил собирать регуляркой только до конца не могу ее осилить. Вот что получилось:
(<[\s]*(?![\/])figure.*?)|(([^<.*figure.*>\w])(<[\s]*(?![\/])img.*?)([^<.*\/*figure.*>]))
В первой части выделяю просто все figure:
(<[\s]*(?![\/])figure.*?) //эта часть рабочая
Во второй части выделяю img которые не обрамлены тэгом figure:
(([^<.*figure.*>\w])(<[\s]*(?![\/])img.*?)([^<.*\/*figure.*>]))
При подобном варианте вроде как работает, хоть и с оговорками:
< figure >< img >< / figure > //так сработает - выделит отдельностоящие img (хоть и как то криво) и выделит только тэг figure в смешанном варианте
Если же есть пробел уже не сработает и будет определять img обрамленный figure
< figure > < img > < / figure > //так уже нет
------------------------------------------------------------------------------------------
Полный пример на что должно срабатывать (но выделяет и img и figure, а должно только figure):
<figure itemprop="associatedMedia image" itemscope="" itemtype="https://schema.org/ImageObject"> <meta itemprop="representativeOfPage" content="true"> <img itemprop="contentUrl url" src="//site.com/url.jpg" title="" alt=""> <meta itemprop="name" content=""> <meta itemprop="width" content=""> <meta itemprop="height" content=""></figure>
------------------------------------------------------------------------------------------------------------------------------------------------
Собранный пример для тестов:
https://regex101.com/r/PC4AFn/1