|
| |
|
|
| |
для: 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;
?>
|
| |
| |
|
|
| |
|
|
| | у меня есть строчка: "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)". Кавычки здесь приведены, что бы отдельить нужную строчку от основного вопроса в этой тее, на них внимание обращать не надо :)
ЗЫ. просто я только начал изучать рег. выражения, а это пока не подсилу, но очень надо | |
| |
|
|
|