PankovAlxndr
@PankovAlxndr
Fullstack web developer

Как написать регулярное выражение?

Здравствуйте, у меня есть такая строка:
<ul>
	<li>
	<p>
		 Какой-то текст
	</p>
 </li>
	<li>
	<p>
		 Какой-то текст
	</p>
 </li>
</ul>


Мне необходимо удалить все теги внутри элемента списка, те чтобы внутри тега был только текст (без параграфа).
Заранее благодарен за помощь.
  • Вопрос задан
  • 131 просмотр
Решения вопроса 2
gobananas
@gobananas
finishhim.ru
// Выбираем всё что в списке
preg_match('/<li>(.*?)<\/li>/ism', $str, $res);

// удаляем все теги
$clear = preg_replace('/<(.*?)>/ism', '', $res[1]);

// Заменяем исходную строку на очищенную от тегов
$str = str_replace($res[1], $clear, $str);

На самом деле вместо preg_match если элементов много надо сделать preg_match_all и последующее удаление тегов с заменой провести в цикле
Ответ написан
Комментировать
xpert13
@xpert13
Full Stack Developer
Конкретно по данному случаю можно использовать такой код:

$text = '<ul>
  <li>
  <p>
     Какой-то текст
  </p>
 </li>
  <li>
  <p>
     Какой-то текст
  </p>
 </li>
</ul>';

$pattern = '~(<li[^>]*>)\\s*<p>([\\s\\S]+?)</p>\\s*(</li>)~i';
$replacement = '\\1\\2\\3';
$returnValue = preg_replace($pattern, $replacement, $text, -1);

echo $returnValue;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
trevoga_su
@trevoga_su
по DOM пройдись с помощью функций для работы с DOM
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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