Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: уменьшить значение в скобках
 
 автор: DEM   (14.08.2007 в 02:48)   письмо автору
 
 

у меня есть строчка: "pole=1(20),pole2=1(3),pole3=1(1)"
Мне надо найти значения меду скобками () и уменьшить на единицу, а потом еще и проверить, если хоть одно из значений станет равно 0 или меньше (мало ли), то удалить его, то есть, после проведения даннйо операции, получится "pole=1(19),pole2=1(2),pole3=1(0)", а после операции проверки, удалится ",pole3=1(0)" и получится просто "pole=1(19),pole2=1(2)". Кавычки здесь приведены, что бы отдельить нужную строчку от основного вопроса в этой тее, на них внимание обращать не надо :)

ЗЫ. просто я только начал изучать рег. выражения, а это пока не подсилу, но очень надо

   
 
 автор: cheops   (14.08.2007 в 10:46)   письмо автору
 
   для: DEM   (14.08.2007 в 02:48)
 

Можно поступить следующим образом
<?php
  
// Текст для разбора
  
$text "pole=1(20),pole2=1(3),pole3=1(1)";
  
// функция обратного вызова 
  
function replace_number($matches
  { 
    
// как обычно: $matches[0] -  полное вхождение шаблона 
    // $matches[1] - вхождение первой подмаски, 
    // заключенной в круглые скобки, и так далее... 
    
    // Уменьшаем на единицу
    
$matches[3]--;
    
// Если значение меньше или равно нулю
    // исключаем поле
    
if($matches[3] <= 0) return "";
    
// В противном случае возвращаем подстроку
    // с новым значением
    
else return "pole$matches[1]=$matches[2]($matches[3])";
  } 
  
$text preg_replace_callback
              
"|pole([\d]*)=([\d]+)\(([\d]+)\)|i"
              
"replace_number"
              
$text); 
  
// Нужно теперь удалить сдвоенные запятые
  
$text preg_replace("|[,]+|"","$text);
  
// А также завершающую запятую
  
$text preg_replace("|,$|i"""$text);
  
// Выводим результат
  
echo $text;
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования