Замена тегов внутри других

  • Автор темы newuser
  • Дата начала

newuser

Guest
Замена тегов внутри других

Прошу не отправлять меня читать документацию (уже прочтена десяток раз), а ответить на мой вопрос по сути - всего одна строка кода. Я уже какие только шаблоны не пробовал, но как написать шаблон, который бы заменял все теги <aaa>...</aaa> на <aaa1>...</aaa1>, но только если они находятся внутри <base>...</base>?
 

SiMM

Новичок
Vladson
PHP:
$text = '<base> <aaa>1</aaa> <aaa>2</aaa> </base>';
(вообще-то личные претензии принято высказывать в приват)
 

sakon

П..и.н..ок
Re: Замена тегов внутри других

Автор оригинала: newuser
Прошу не отправлять меня читать документацию (уже прочтена десяток раз), а ответить на мой вопрос по сути - всего одна строка кода. Я уже какие только шаблоны не пробовал, но как написать шаблон, который бы заменял все теги <aaa>...</aaa> на <aaa1>...</aaa1>, но только если они находятся внутри <base>...</base>?
Я все таки отправлю почитать ман.
Сначала preg_replace_callback потом preg_replace
 

newuser

Guest
sakon
А просто одним шаблоном это сделать нельзя?
 

newuser

Guest
Ну я пробовал, например, вот такое:
Код:
$html = preg_replace('/<base>(.*?)<aaa \/>(.*?)<\/base>/si', '<base>$1<aaa1 />$2</base>', $html);
в надежде, что сработает, но нет :)
 

DiMA

php.spb.ru
Команда форума
PHP:
$text = '<base> <aaa>1</aaa> <aaa>2</aaa> </base> <zzz>  <aaa>1</aaa> <aaa>2</aaa> </zzz>';

function _preg($text) {
    return preg_replace("!<aaa([^>]*)>(.*?)</aaa>!is","<aaaaaa\\1>\\2</aaaaaa>",$text);
}

echo preg_replace("!(<base[^>]*>)(.*?)(</base>)!ise","\"\\1\"._preg(\"\\2\").\"\\3\"",$text);
после "> " пробелы удалить
 

newuser

Guest
Спасибо, я просто думал, что это можно сделать легче и при помощи одного шаблона без подобных ухищрений :)
 
Сверху