#html #regex
#HTML #регулярное выражение
Вопрос:
У меня есть некоторый HTML, и требуется удалить только начальные <p>
теги из строки.
Пример:
input: <p style="display:inline; margin: 40pt;"><span style="font:XXXX;"> Text1 Here</span></p><p style="margin: 50pt"><span style="font:XXXX">Text2 Here</span></p> <p style="display:inline; margin: 40pt;"><span style="font:XXXX;"> Text3 Here</span></p>the string goes on like that
desired output: <span style="font:XXXX;"> Text1 Here</span></p><span style="font:XXXX">Text2 Here</span></p><span style="font:XXXX;"> Text3 Here</span></p>
Возможно ли это с помощью регулярных выражений? Я пробовал некоторые комбинации, но не работает. Это все одна строка. Любой совет приветствуется.
Комментарии:
1. Какой вариант регулярного выражения? JavaScript, PCRE, python?
2. Если вы удалили начальный
<p>
тег, я думаю, вы хотите удалить закрытие</p>
, а также сформировать желаемый результат.
Ответ №1:
Я уверен, что вы знаете предупреждения об использовании регулярных выражений для сопоставления с html. С помощью этих отказов от ответственности вы можете сделать это:
Вариант 1: оставить закрывающие </p>
теги
Этот первый вариант оставляет закрывающие </p>
теги, но это то, что показывает ваш желаемый результат. 🙂 Вариант 2 также удалит их.
PHP
$replaced = preg_replace('~<p[^>]*>~', '', $yourstring);
JavaScript
replaced = yourstring.replace(/<p[^>]*>/g, "");
Python
replaced = re.sub("<p[^>]*>", "", yourstring)
<p
соответствует началу тега- Отрицательный символьный класс
[^>]*
соответствует любому символу, который не является закрывающим>
>
закрывает совпадение- мы заменяем все это пустой строкой
Вариант 2: также удаление закрывающих </p>
тегов
PHP
$replaced = preg_replace('~</?p[^>]*>~', '', $yourstring);
JavaScript
replaced = yourstring.replace(/</?p[^>]*>/g, "");
Python
replaced = re.sub("</?p[^>]*>", "", yourstring)
Комментарии:
1. как насчет закрытия
</p>
тега? Я думаю, что OP этого не хочет.</p>
Также удалить из вывода. OP говорит: удалите только начальные теги из строки.2. @Braj Как уже упоминалось, посмотрите на его желаемый результат. Он сохраняет теги </p>. 🙂
3. К вашему сведению, добавлен второй вариант на случай, если вы также хотите удалить закрывающие теги </p> .
4. @Braj Хорошо, добавлена опция для этого… Приветствия!
5. 1 Хороший ответ для рассмотрения всех языков и тестовых примеров.
Ответ №2:
Это выражение PCRE:
/<p( *w =("[^"]*"|'[^']'|[^ >]))*>(.*</p>)/Ug
Замените каждое вхождение на $ 3 или просто удалите все вхождения:
/<p( *w =("[^"]*"|'[^']'|[^ >]))*>/g
Если вы хотите также удалить закрывающий тег:
/<p( *w =("[^"]*"|'[^']'|[^ >]))*>(.*)</p>/Ug