Проблема с регулярным выражением

Modest

Новичок
Проблема с регулярным выражением

Нужно из d{aa{yy}g}d получить d<aa<yy>g>d

Вариант str_replace("{", "<", $s);str_replace("}", ">", $s) не подходит, т.к. нужно содержание внутри

preg_replace("/\{(.+?)\}/", "<$1>", "d{aa{yy}g}d") выдает d<aa{yy>g}d

Помогите пожалуйста составить правильно выражение.
 

ustas

Элекомист №1
поиском,
RegexBuddy 3.0.3. Программа для написания и отладки регулярных выражений. При составлении выражения каждый элемент комментируется словами, описывая в доступной форме что будет найдено. Действие составленного регулярного выражения можно сразу же проверить на нужном текстовом фрагменте или файле. После отладки регулярное выражение можно сохранить в формате языков C#, Delphi, Java, JavaScript, PCRE, Perl, PHP, Python, REALbasic, Ruby, VB6 & VB.NET, VBScript.

-~{}~ 23.10.07 19:21:

и еще гугл знает где лежит книга Mastering Regular Expression (second edition) - J.Friedl
 

Modest

Новичок
А по теме?
Если мне нужна будет литература, то создам соответствующую тему.
 

Modest

Новичок
Спасибо, что сообщили. Честно не знал, т.к. в прошлый раз мне помогли.
 

Gas

может по одной?
Modest
делай в 2 шага: заменяешь {} и получаешь значения по внутренних.
Ну и конечно выдвигать какие-то претензии вообще мимо кассы.
 

surg30n

Новичок
Как вариант--

PHP:
function callback_($input) {
    $input[1] = preg_replace_callback('/{(.*)}/','callback_',$input[1]);
    return "<{$input[1]}>";
}
var_dump(preg_replace_callback('/{(.*)}/','callback_','d{aa{yy}g}d'));
 

Beavis

Banned
Автор оригинала: Modest
А по теме?
Если мне нужна будет литература, то создам соответствующую тему.
а ты зачем эту тему создал?) чтоб люди за тебя делали работу?) так за работу платить надо
тебе сказали где смотреть - смотри и учись
 

Pigmeich

Новичок
Re: Проблема с регулярным выражением

Автор оригинала: Modest
Нужно из d{aa{yy}g}d получить d<aa<yy>g>d

Вариант str_replace("{", "<", $s);str_replace("}", ">", $s) не подходит, т.к. нужно содержание внутри

preg_replace("/\{(.+?)\}/", "<$1>", "d{aa{yy}g}d") выдает d<aa{yy>g}d

Помогите пожалуйста составить правильно выражение.
Либо убрать '?' после '.+' (тебе как раз greedy поведение не нужно) и прогнать два раза.

Либо "/\{(.+?)\{(.+?)\}(.+?)\}/"

А вот для того, чтобы знать что такое greedy и осмысленно его ставить - читай доки.
 

preg

Новичок
держи рабочий вариант:
Код:
 $a = "d{aa{yy}g}d";            
 
 $a = preg_replace ( "#(.+?)\{(.*?)\{(.*?)\}(.*?)\}(.+?)#i", "\\1<\\2<\\3>\\4>\\5", $a );
 
 echo $a;
 
Сверху