В общем не получается решить следующую задачу: Есть файл со строками: Строка 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]. Знающие люди подскажите рабочий вариант. Подсказка от модератора: Любой код или текст конфигурации пишите между тегом [code=php] и [/code]. Используйте отступы в коде для форматирования текста. Это помогает быстрее понять вас, увеличивает шанс на получение ответа. Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, результаты array/object dump и т. д.
Re: Заменить каждое вхождение в одной строке разными значени анонимная функция со статической переменной
Re: Заменить каждое вхождение в одной строке разными значени preg_replace_callback и в функции делаешь статическую переменную как сказали выше
Вот ответ, всем спасибо. Код (PHP): $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);