1. Начата процедура восстановления социальных групп. Лидерам старых и новых групп обязательно ознакомиться с регламентом проведения работ.

Регулярка - поиск с заменой

Тема в разделе 'Как сделать...', создана пользователем rasandrey, 7 фев 2012.

  1. еще есть проблема, как ее правильно решить, не понял, уже голову сломал, например:
    PHP:

    function setform($id) {
            
    $q mysql_query("select count(*) from table where id = '$id'") or die(mysql_error()) ;
            
    $plus mysql_fetch_row($q) ;
            
    $new_text $id ;
            return 
    $plus[0].$new_text ;
    }
    $text '{prog-vote122} Руководством ОАО ФСК ЕЭС' ;
    $text preg_replace ('/\{prog\-vote([0-9]+)\}/'setform("$1"), $text);
    Но в функцию на строке запроса в $id оказывается значение $1, зато переменная $new_text принимает правильное значение 122
    Как сделать в этом случает правильно?
  2. Viodele Механик

    Administrator
    В данном случае целесообразно использовать callback.
    PHP:
    function setform ($matches) { // --- в $matches попадет массив данных из всех "карманов" регулярки
            
    $id = (int)$matches[1];  // --- выборка из кармана $1
            
    $q mysql_query("select count(*) from table where id = '$id'") or die(mysql_error()) ;
            
    $plus mysql_fetch_row($q) ;
            
    $new_text $id ;
            return 
    $plus[0].$new_text ;
    }
     
    $text '{prog-vote122} Руководством ОАО ФСК ЕЭС' ;
    $text preg_replace_callback ('/\{prog\-vote([0-9]+)\}/''setform'$text);
    В отличии от preg_replace, функция preg_replace_callback передаст результат парсинга строки пользовательской функции(в данном случае setform).
    rasandrey нравится это.