Не могу создать regex для изменения заголовков <h2></h2>

artnik7

Новичок
У меня в файле WP шаблона есть обычные HTML заголовки типа <h2>текст</h2>. Мне нужно чтобы каждый такой заголовок изменялся на <div class="title" ><h2>Мета</h2><i></i><b></b></div> , чтобы я мог применить к нему стили.
Сделал на jQuery но минус в том, что пока нужные скрипты не загрузятся браузером, то пользователь видит неотформатированные заголовки и не совсем в том месте где они должны быть.

Пробовал химичить с preg_replace но в регулярных выражениях я почти не шарю.

Подскажите регулярное выражение для этой несложной задачки.
 

shelestov

я тут часто
PHP:
preg_replace("!<h2>(.*?)</h2>!si", "<div class=\"title\"><h2>$1</h2><i></i><b></b></div>", $content);
 

Dovg

Продвинутый новичок
shelestov
Знаю, что не валидно, но <h2> ololo<h2> trololo</h2></h2>
 

AmdY

Пью пиво
Команда форума
Для таких вещей создай плагин в wysiwyg редакторе, чтобы он вставлял весь нужный код.
 

artnik7

Новичок
PHP:
preg_replace("!<h2>(.*?)</h2>!si", "<div class=\"title\"><h2>$1</h2><i></i><b></b></div>", $content);
Попробовал, но почему-то срабатывает только для первого заголовка.

вот что у меня получилось:
PHP:
  $str = '<h2>тест</h2> asda <h2>тестs</h2> asda <h2>тесsт</h2>';
  preg_match("!<h2>(.*?)</h2>!si", $str, $matches);
  print_r($matches);
вывело вот это:
PHP:
Array
(
    [0] => <h2>тест</h2>
    [1] => тест
)
 

artnik7

Новичок
Не, мне нужно через preg_replace но он возвращает ту-же строку, не изменяя ее.
Я тут все правильно сделал?
PHP:
$str = '<h2>тест</h2> asda <h2>тестs</h2> asda <h2>тесsт</h2>';
preg_replace("!<h2>(.*?)</h2>!si", '<div class=\"title\"><h2>$1</h2><i></i><b></b></div>', $str);
print_r($str);
результат - <h2>тест</h2> asda <h2>тестs</h2> asda <h2>тесsт</h2>
 

shelestov

я тут часто
PHP:
$str = '<h2>тест</h2> asda <h2>тестs</h2> asda <h2>тесsт</h2>';
$result = preg_replace("!<h2>(.*?)</h2>!si", '<div class=\"title\"><h2>$1</h2><i></i><b></b></div>', $str);
print_r($result);
 

artnik7

Новичок
и еще плюс мне нужно чтобы к первому <div class=\"title\"> добавлялся класс "title-1". Это реально с preg_replace сделать?
 

freeek

Новичок
regex рекурсия, но опять же там выпадет часть
или через callback функцию

но, если h2 внутри h2, это вообще нонсенс, не говорю о валидности, но для того же сео
 
Сверху