заменить совпадения из рег.выражения на соотв.глобальные переменные

ardentlyo

Новичок
заменить совпадения из рег.выражения на соотв.глобальные переменные

мне нужно прочитать хтмл-файл, в котором переменные задаются {var_name} и заменить на значение реальной переменой GLOBALS['var_name'].
каждую строку проверяю регуляркой так:
PHP:
	$pattern = "\\{([[:alnum:]_]+)\\}";
$curr_str = ereg_replace($pattern, '$GLOBALS["\\1"]', $curr_str);
но в рещультате получается $GLOBALS["var_name"], мне нужно с одинарными кавычками! ставить одинарные - не подставляется значение из кармана регулярки-(
кто подскажет, как сделать?
 

ardentlyo

Новичок
в данном случае не то, не другое не помагает. Желание!? не вижу на данный момент другого способа!
 

Gas

может по одной?
мне флаг "е" помогает, ну а callback для этой ситуации слишком громоздко.
 

ardentlyo

Новичок
блин, у мну ниче не получается. шо за день..
preg_replace_callback - не жрет "\\{" - бэкслешы, почему непонятно, в preg_replace - работает.
Gas
с флагом оно тож не интерпретируется как надо
 

FractalizeR

Новичок
Автор оригинала: ardentlyo
в данном случае не то, не другое не помагает. Желание!? не вижу на данный момент другого способа!
Почему это флаг e не помогает? Может, вы не умеете его использовать? Покажите, что у вас не получается.
 

Gas

может по одной?
ardentlyo
смотри, если у меня работает (конечно код не один в один твой, но суть так же), значит или у меня какой-то "неправильный" php, или это случайность, или ты что-то делаешь не так. В какой вариант тебе больше верится ?
Приведи новый пример и посмотрим.
 

ardentlyo

Новичок
FractalizeR
мож и не правильно юзаю, ненаю.. ну воть так пишу:
PHP:
$pattern = ""; 
$curr_str = preg_replace("\\{([[:alnum:]_]+)\\}/e", "$GLOBALS['\\1']", $curr_str);
Ну что-то такое
 

Bitterman

Новичок
А где эти-то, как их, ограничители, что ли? символ "/" в начале паттерна поставить не надо?
 

ardentlyo

Новичок
что с ним, что без: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING
ну оно и понятно, потому что ключ в массиве указывается в одинарных кавычках, а тут он без кавычек!
 

С.

Продвинутый новичок
ardentlyo, попробуй выполнить код:

echo "$GLOBALS['\\1']";
 

ardentlyo

Новичок
С.
оно просто не подставляется, его надо ложить ток в двойные кавычки. Уже фсе перепробовал, нехочет ... придется писать кучу кода, что б решить такую простую задачу
 

Gas

может по одной?
ardentlyo
в моём последнем посте 2 шага, которые нужно сделать чтоб заработало.
 

A1x

Новичок
до кучи
PHP:
function subst($match) {
    return $GLOBALS[str_replace(array('{','}'), '', $match[1])];
}
$out = preg_replace_callback('/(\{[a-zA-Z0-9_]+?})/s', 'subst', $tpl);
 
Сверху