За последние 24 часа нас посетили 15011 программистов и 1769 роботов. Сейчас ищут 1524 программиста ...

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

Тема в разделе "Регулярные выражения", создана пользователем Nzt-48, 13 янв 2016.

  1. Nzt-48

    Nzt-48 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    2
    Симпатии:
    0
    В общем не получается решить следующую задачу:

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

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

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

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

    Наваял вот такой вариант:
    Код (PHP):
    1. include "config.php";
    2. $filename = "test.html";
    3. $findstr = '/\{.*?\}/';
    4.  
    5. $shab = @fopen('test.html', 'r');
    6. $g = 1;
    7. if ($shab) {
    8.     while (($buffer = fgets($shab, 4096)) !== false){
    9.         $tostr  = '[REPLACE-'.$g.']';
    10.         $tmp = fopen('tmp.txt', 'a+');
    11.         fwrite($tmp, preg_replace($findstr, $tostr, $buffer));
    12.         $g++;                
    13.     }
    14.     fclose($shab);
    15.     fclose($tmp);
    16.     $tmp = file('tmp.txt');
    17.     $shab = @fopen('test.html', 'w');
    18.     fwrite($shab,implode("",$tmp));
    19.     unlink('tmp.txt');
    20. } 
    Но замена вхождений получается [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 и т. д.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Заменить каждое вхождение в одной строке разными значени

    анонимная функция со статической переменной :D
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Re: Заменить каждое вхождение в одной строке разными значени

    preg_replace_callback и в функции делаешь статическую переменную как сказали выше
     
  4. Nzt-48

    Nzt-48 Новичок

    С нами с:
    13 янв 2016
    Сообщения:
    2
    Симпатии:
    0