Поиск подстрок и их замена

vispik88

Новичок
Добрый день ещё раз!
Ребят, подскажите плиз:
необходимо в строке, типо
"My string has vars: '.VAR1.' and '.VAR2.' "
найти по шаблону все переменные типа '.NAME_OF_VAR.', заменить их на %s и поместить в какой-нибудь массив.


Есть какие-то встроенные функции для поиск и замены по шаблону??? perg_replace не так работает... :(
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
что не так работает?
 

vispik88

Новичок
Мне нужно чтобы формировался массив, а preg_replace формирует переменные $1, $2...
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
vispik88
тебе нужно подставить вместо VAR1 значение константы? а потом выбрать все их в массив? или что?
 

vispik88

Новичок
"My string has vars: '.VAR1.' and '.VAR2.'


Мне нужно VAR1, VAR2 поместить в массив
А вместо них поставить %s
 

vispik88

Новичок
Вот, мне нужно сделать такое действие чтобы работала функция vsprintf()

Т.е. передать туда строку, типо "string %s lalalalal %s"
и массив параметров ('str1', 'str2')

А для этого нужно создать такую строку "string %s lalalalal %s" из "string ".VAR1." lalalalal ".VAR2.""
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Я тоже решил через регулярки, правда у меня с ними думаю не все так хорошо)))

preg_match_all + preg_replace юзал
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
vispik88
время есть, но надо показать свой код, который у тебя не работает, вот его поправить тебе помогут скорее, чем дадут готовый
 

vispik88

Новичок
$pattern = "!.+\'\s?\.\s?([A-Z0-9_])+\s?\.\s?\'.*!";

$str = "My function is '.NAME.' and '.NAME2.' and fff";
$string = preg_replace($pattern, '%s', $str);
echo $string;
 

vispik88

Новичок
Он выводит %s, а не заменённую строку. Т.е. вместо

$str = "My function is '.NAME.' and '.NAME2.' and fff";
должен вывести

"My function is %s and %s and fff";
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Ну для начала неплохо, однако ты забыл о моем сообщении выше, там была функция preg_match_all, а потом уже preg_replace.

Ну и немножко надо подкорректировать регулярное выражение, на нечто в виде : /\'\s?\.\s?([a-z0-9_]+)\s?\.\s?\'/i

Да поправят меня гуру регулярок
 

vispik88

Новичок
Ты можешь написать то, что у тебя получилось с помощью preg_match_all и preg_replace? Я регулярку поправлю сам

НУ или написать как это должно работать, я думал preg_replace сможет это всё сама сделать, но видимо нет
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
PHP:
$str = "My string has vars: ' . VAR_1. ' and fff ' . VAR2.' ";
preg_match_all(pattern, $str, $matches);
echo $x = preg_replace(pattern, '%s', $str);
print_r($matches);
 
Сверху