Заменить каждое вхождение в одной строке разными значениями

Nzt-48

Новичок
В общем не получается решить следующую задачу:

Есть файл со строками:

Строка 1
Текст текст текст {Текст| текст| текс} Текст текст текст {Текст| текст| текс} Текст текст текст
Строка 2
Текст текст текст {Текст| текст| текс} Текст текст текст Текст текст текст {Текст| текст| текс}

В файле необходимо произвести замену на следующие данные:

Строка 1
Текст текст текст [REPLACE - 1] Текст текст текст [REPLACE - 2] Текст текст текст
Строка 2
Текст текст текст [REPLACE - 3] Текст текст текст Текст текст текст [REPLACE - 4]
и т.д.
Нумерация должна идти по порядку

Наваял вот такой вариант:
PHP:
include "config.php";
$filename = "test.html";
$findstr = '/\{.*?\}/';

$shab = @fopen('test.html', 'r');
$g = 1;
if ($shab) {
  while (($buffer = fgets($shab, 4096)) !== false){
     $tostr  = '[REPLACE-'.$g.']';
    $tmp = fopen('tmp.txt', 'a+');
    fwrite($tmp, preg_replace($findstr, $tostr, $buffer));
    $g++;         
  }
   fclose($shab);
   fclose($tmp);
   $tmp = file('tmp.txt');
   $shab = @fopen('test.html', 'w');
   fwrite($shab,implode("",$tmp));
   unlink('tmp.txt');
}
Но замена вхождений получается [REPLACE - x] где x = номер строки, вот пример:

Текст текст текст [REPLACE-18] Текст текст текст [REPLACE-18], Текст текст текст [REPLACE-head_18] текст [REPLACE-18].

Текст текст текст [REPLACE-20].

Знающие люди подскажите рабочий вариант.:(
 

AmdY

Пью пиво
Команда форума
Здесь уже 100500 ваши пидорские сео генераторы обсуждались, мошейничаешь с поиском, так хоть научись им пользоваться.
 

Nzt-48

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

$g = 1;
$txt = file_get_contents('test.html');
$txt = preg_replace_callback('~\{.*?\}~s', function () use(&$g) { return '[REPLACE-'. $g++ .']'; }, $txt);
file_put_contents('test.html', $txt);

Вот ответ, всем спасибо.
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
ну, ты генерируешь html на основании шаблона и списка замены, да и {Текст| текст| текс} типичный сеостайл.

а по коду, зачем тебе писать в 'tmp.txt', на каждую строчку открывая его на дозапись, если ты потом содержимое всё равно загоняешь в массив, а файл удаляешь? можно было просто переименовать файл, раз в итоге подменяешь test.html
ну и при написании регулярок нужно помнить о юникоде
 

Nzt-48

Новичок
$shab = @fopen($puth_shab, 'r');
$g = 1;
if ($shab) {
while (($buffer = fgets($shab, 4096)) !== false){
$txt = file_get_contents($puth_shab);
$txt = preg_replace_callback('~\{.*?\}~s', function () use(&$g, &$file_name) { return '[RANDLIST-'.$file_name.'_'. $g++ .']'; }, $txt);
file_put_contents($puth_shab, $txt);

}
fclose($shab);
}

Все верно, это генератор, но не для html и не для того, о чем ты думаешь.
 
Сверху