вложенный — 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>"

0

Решение

Лучше всего было бы разделить ваши разделы; Я предполагаю, что этот пример будет применен к большему блоку, и, к сожалению, трудно быть универсальным в алгоритмах замены — каждый формат будет иметь шанс, как вы лучше его разрабатываете.

В этом случае я предполагаю, что вы разделяете на основе <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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]