regexp, замена одинаковых слов !

klep

Новичок
regexp, замена одинаковых слов !

Всем привет !

Я с regexp раньше не работал, по этому не пинайте ногами.
Почитал синтаксис, вроде все ясно.

Вот только не понял как сделать такое:

Есть массив в нем: aaaabbbbcccdddd{test}hhhpopddff{test}kkkffffffggg{test}lllll

{test} - может встечаться много раз

Задача:
Заменить все {test} на значения типа такого <img src="1.jpg">, <img ,src="2.jpg">, <img ,src="3.jpg">

То есть для каждого {test} уникальный "?.jpg"

?

P.s
Просто замена одного слова на другое я знаю как сделать, а вот с инкриментом - нет.
 

Demiurg

Guest
>Есть массив в нем: aaaabbbbcccdddd{test}hhhpopddff{test}kkkffffffggg{test}lllll
что то я не вижу сдесь массива.
 

Tigr

Новичок
function mfunc($v)
{
...
return '<img src="'.$filename.'.jpg">';
}

echo preg_replace ("/({test})/e",
"mfunc('\\1')",
'aaaabbbbcccdddd{test}hhhpopddff{test}kkkffffffggg{test}lllll');
 

klep

Новичок
2 Tigr

Да, классно !

Только еще один вопрос.

У меня происходит выборка из таблицы по средствам MySQL
и этb значения необходимо подставить в
mfunc, $filename, kak (если результат поступает mysql_fetch_array($this->_dbSQL,MYSQL_BOTH); по строкам)?
 

klep

Новичок
Значение переменной $filename берется из таблицы (MySQL)!


$this->_dbSQL=mysql_query($Query);

for($i=0;$i<mysql_numrows($this->_dbSQL);++$i)
{

$mas=mysql_fetch_array($this->_dbSQL,MYSQL_BOTH);

$filename=$mas['myid'];


}

-~{}~ 31.05.04 10:16:

При каждом нахождение искомого
в preg_replace будет вызвана функция mfunc

Как мне задать нужное значения $filename в этот момент?
 

Demiurg

Guest
klep
ты можешь объяснить толком что тебе нужно сделать, а не выдовать информацию мелкими порциями ?
 

klep

Новичок
Я пытаюсь ;)

function mfunc($v)
{
return '<img src="'.$filename.'.jpg">';
}


$this->_dbSQL=mysql_query($Query);

for($i=0;$i<mysql_numrows($this->_dbSQL);++$i)
{

$mas=mysql_fetch_array($this->_dbSQL,MYSQL_BOTH);

$filename=$mas['myid'];

}


echo preg_replace ("/({test})/e",
"mfunc('\\1')",
'aaaabbbbcccdddd{test}hhhpopddff{test}kkkffffffggg{test}lllll');


Из таблицы дергаются значения:
$filename = 1
$filename = 2
$filename = 3
$filename = 4

Как сделать так, чтобы после работы preg_replace
строка выглядела так:

aaaabbbbcccdddd<img src="1.jpg">hhhpopddff<img src="2.jpg">kkkffffffggg<img src="3.jpg">lllll'

?

Значений $filename может быть много
 

Demiurg

Guest
Это не описание задачи а описание одного из путей её решения, причем не факт, что правильного.
 

neko

tеam neko
что искать то, 10 раз написал уже сам.

про массивы слышал? про индексы к ним? в чем проблема.
 

Demiurg

Guest
>Пути решения я как раз и ищу !
ищи, мы тебе помочь не можем. Задачу мы не знаем и объяснить нам её никто не хочет.
 

klep

Новичок
Как передать callback функцию:

function mfunc($v)
{
return '<img src="'.$filename.'.jpg">';
}

значение $filename (глобально не подходит) ?

Необходимо заменить с помощью регулярных выражений строку вида:
aaaabbbbcccdddd{test}hhhpopddff{test}kkkffffffggg{test}lllll

на строку

aaaabbbbcccdddd<img src="1.jpg">hhhpopddff<img src="2.jpg">kkkffffffggg<img src="3.jpg">lllll'

Где 1,2,3 значение из SQL таблицы.

как это сделать ?

Выбрать значение не проблема, проблема их подставить, так как preg_replace обрабатывает сразу всю строку (ну не могу я его в цикл засунуть и менять filename там)
 

neko

tеam neko
тебе уже все сказали.

1. preg_replace_callback()
2. имена файлов своих хранишь в массиве и по одному вставляешь

что еще неясно?
 

klep

Новичок
все ясно.

Придется добавлять в массив и хранить глобальный счетик на его индексы.
 
Сверху