Для альтернативы регулярному выражению, которая будет искать различные комбинации пробелов или неразрывных пробелов html-сущностей в данных, которые вы можете использовать.
preg_replace('/\s?<p>(\s| )*<\/p>/', '', $data);
Расширенное значение соответствия
\s?
необязательно начинается с одного символа пробела. с последующим
на <p>(\s| )*</p>
элемент абзаца, который содержит ноль
или более пробельный символ или html-сущность без пробелов.
Результат
<!-- TRAJET -->
<h3>Votre trajet</h2>
<div class="septraf"> </div>
<p><span style="text-decoration: underline;">Dans les 2 sens</span> :<br />- arrêt Mimosas reporté à l'arrêt provisoire placé route de Vannes au niveau de la station essence<br />- arrêt Cravate reporté à l'arrêt Ferrière</p>
Это удалит следующие комбинации:
<p></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
\s<p></p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
\s<p> </p>
Имейте в виду, \s
не является буквальным пространством, но относится ко всем
пробельные символы \n
, \r
, \t
.
Если вы хотите сопоставлять только горизонтальные пробелы, замените \s
на \h
.
, если вы хотите сопоставлять только буквенные пробелы, замените \s
на \040
или [ ]
Я полагаю, что первоначальная проблема с str_replace
была вызвана ошибочным пробелом в конце, который может отсутствовать в данных.
str_replace('<p> </p> ', '', $data);
Должно быть https://3v4l.org/ptJeE
str_replace('<p> </p>', '', $data);
Я считаю, что проблема связана с добавлением буквального неразрывного пробела \xc2\xa0
, alt+0160
или
, который не соответствует \s
.
preg_replace('/\s?<p>(\s|\xc2\xa0| )*<\/p>/', '', $data);