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

еще есть проблема, как ее правильно решить, не понял, уже голову сломал, например:
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
Как сделать в этом случает правильно?
 
Как сделать в этом случает правильно?
В данном случае целесообразно использовать 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).
 
Назад
Сверху