PHP preg_replace внутри блоков текста
У меня есть текст, например, такой:
$text="<body><div><p>Some test text.</p></div><p>Some test text.</p></body>";
И у меня есть массив регулярных выражений:
$regexes = array(
0 => '/<div>.*<\/div>/',
1 => '/<p>.*<\/p>/')
;
Мне нужно применять каждое регулярное выражение поочередно к исходному тексту и при некоторых заменах в найденных блоках.
Например:
$result = $text;
foreach ($regexes as $reg) {
preg_match($reg, $result, $matches);
$result = $matches[0];
}
вернуть "<p>Some test text.</p>"
Как заменить слово "текст" словом "новый", но только в первой части $text? Элементы (регулярные выражения) массива $regexes могут быть в любом количестве и порядке.
Результат должен быть таким: "<body><div><p>Some new text.</p></div><p>Some test text.</p></body>"
1 ответ
Лучше всего было бы разделить ваши разделы; Я предполагаю, что этот пример будет применен к большему блоку, и, к сожалению, трудно быть универсальным в алгоритмах замены - каждый формат будет иметь шанс, как вы лучше его разрабатываете.
В этом случае я предполагаю, что вы разделяете на основе <div>
элементы. Итак, мы могли бы сделать:
$elements = explode('</div>',$text);
// in this case your required block is at position [0]
$elements[0]=apply_regex_algorithm($elements[0]);
$text = implode('</div>',$elements);
Как упоминалось выше, способ разделения будет зависеть от того, как ваш текст вводится в метод и каковы ваши конкретные требования к замене.
Для более точного редактирования текста в заданных элементах (т. Е. В более крупной HTML-структуре) проверьте Symfony2 DOM Crawler.