Regex для замены <p class = "someClass"> тегом <h2>?

Мне нужно заменить все:

<p class="someClass someOtherClass">content</p> 

с

 <h2 class="someClass someOtherClass">content</h2> 

в строке содержимого. В основном я просто хочу заменить "p" на "h2" .

Это то, что у меня есть до сих пор:

 /<p(.*?)class="(.*?)pageTitle(.*?)">(.*?)<\/p>/ 

Это соответствует всему тегу <p> , но я не уверен, как бы я пошел на замену <p> на <h2>

Как мне это сделать?

Related of "Regex для замены <p class = "someClass"> тегом <h2>?"

Следующее должно делать то, что вы хотите:

 $str = '<p>test</p><p class="someClass someOtherClass">content</p>'; $newstr = preg_replace('/<p .*?class="(.*?someClass.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$str); echo $newstr; 

Точка ( . ) Соответствует всем. Звездочка соответствует либо 0, либо количеству совпадений. Все, что находится внутри скобки, – это группа. Переменная $2 является ссылкой на сопоставленную группу. Число внутри фигурных скобок ( {1} ) является квантором, что означает совпадение с предыдущей группой один раз. Вероятно, этот квантификатор не нужен, но он все равно и работает нормально. Обратная косая черта избегает любых специальных символов. Наконец, вопросительный знак делает бит .* Бит не жадным, поскольку по умолчанию он есть.

Не делай этого лучше, но это поможет 🙂

 $text = '<p class="someClass someOtherClass">content</p>'; $output = str_replace( array('<p', '/p>'), array('<h2', '/h2>'), $text ); 

Это будет работать 🙂

 preg_replace('/<p .*?class="(.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$value); 

Извините, немного поздно на вечеринку. Я использовал регулярное выражение из ответа:

 $str = '<p>test</p><p class="someClass someOtherClass">content</p>'; $newstr = preg_replace('/<p .*?class="(.*?someClass.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$str); echo $newstr; 

этот подход имеет проблему, когда у вас больше p-тэгов, например, в блоке текста. Вот как я затвердел регулярное выражение, чтобы охватить эту ситуацию:

 $newstr = preg_replace('/<p [^<]*?class="([^<]*?someClass.*?)">(.*?)<\/p>/','<h2 class="$1">$2</h2>',$str);