составление регулярного выражения php

290
30 июля 2017, 10:12

Есть текст:

<hr class="h1"><sftxt>Hello World!</sftxt><hr class="h1">

Так же есть текст:

<hr class="h1"><bxtwt>Hello World!</bxtwt><hr class="h1">

Как можно удалить тэг <hr class="h1"> из текста приведенного выше? Причем только если рядом с этим тэгом идет тэг <sftxt> или </bxtwt> или <bxtwt> или </sftxt>

ибо если текст имеет другой формат, допустим

<hr class="h1"><div class="text">qwerty</div>123456<br><hr class="h1">

то тогда в этом случае <hr class="h1"> мы не трогаем

Answer 1

я бы советовал использовать класс simple_dom_html_parser php, сделать селектор типа

foreach($html->find('hr.h1') as $elem) {
   // здесь ищем в $elem теги из задачи
   // ...
   // при необходимости удаляем
   // ...
}//foreach($html->find('hr.h1') as $elem) 
Answer 2

Если интересует решение на чистых регулярках, то вот один из вариантов:

$string = '
    <hr class="h1"><sftxt>Hello World!</sftxt><hr class="h1">
    <hr class="h1"><bxtwt>Hello World!</bxtwt><hr class="h1">
    <hr class="h1"><div class="text">qwerty</div>123456<br><hr class="h1">
';
$pattern = '~
    (?:<hr[^>]*>(?=(?:<sftxt>|<bxtwt>))|
    (?<=(?:</sftxt>|</bxtwt>))<hr[^>]*>)
~x';
echo preg_replace($pattern, '', $string);
/* Результат:
<sftxt>Hello World!</sftxt>
<bxtwt>Hello World!</bxtwt>
<hr class="h1"><div class="text">qwerty</div>123456<br><hr class="h1">
*/
Answer 3

Вот решение в лоб:

$text = '<hr class="h1"><sftxt>Hello World!</sftxt><hr class="h1">';
$text = preg_replace('/<hr class=\"h1\">\$*(?=<sftxt>|<bxtwt>|<\/sftxt>|<\/bxtwt>)/', '', $text);
echo preg_replace('/(?<=<sftxt>|<bxtwt>|<\/sftxt>|<\/bxtwt>)\$*<hr class=\"h1\">/', '', $text);
READ ALSO
не доходят email сообщения

не доходят email сообщения

Шлю сообщение через функцию mail ,обработчик пишет,что все ок -сообщение отправлено,но сообщение не приходит на emailМожет нужно как-то на хостинге...

257
Фильтр для магазина средствами Yii2? [требует правки]

Фильтр для магазина средствами Yii2? [требует правки]

Ребята кто сможет мне помочь в реализации фильтра средствами yii2, напишу честно я не понимаю как его сделать

264
Обработать 0 rows в запросе к PostgreSQL

Обработать 0 rows в запросе к PostgreSQL

ПриветКак обработать запрос к PostgreSQl, если он вернул 0 rows? Например, я делаю запрос:

263
Наследование свойств

Наследование свойств

Есть такой код:

206