pandaa
@pandaa

Регулярные выражения, почему не работает (.*) — ноль или более символов?

Хочу удалить атрибуты у тегов, оставив при этом сами теги и их содержимое.

$str = '
<p>без атрибутов</p>
<p align="justify">с атрибутами</p>';

$res = preg_replace('/((?<=<p)(.*)(?=>))/msU', "", $str);
echo $res; /


В итоге удаляется тег с текстом без атрибутов, как это можно исправить?

В регулярных выражениях не спец, думаю задача езе простая для тех кто шарит, заранее спасибо
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
@IS-Builder
~ PHP-8 & REGEXP - This is a really powerful kit ~
pandaa
$str = '<p>без атрибутов</p>
<p align="justify">с атрибутами</p>';

$res = preg_replace('~<\pL+\d?\K.*?(?=>)~', '', $str);

echo $res;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Может проще использовать, например https://github.com/paquettg/php-html-parser/ и метод removeAttribute?

А так попробуйте
preg_replace('/(<p)[^>]+?(>.*)/g', "$1$2", $str);
Ответ написан
@user49981
$str = '
<p>без атрибутов</p>
<p align="justify" style="color:red;" class="c1">с атрибутами</p>';

$res = preg_replace('/<p ([^>]{0,}[\s]{0,})>/msU', "<p>", $str);
echo $res;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы