есть строка v:6,p:1,n:2 и вот собственно функция которая ее обрабатывает
protected function getInfo($param,$n,$o){
preg_match('/'.$param.':([0-9]*)/',$this->CUser[0]['info'],$m);
if(isset($m[1]) && is_numeric($m[1])){echo $this->CUser[0]['info']."\n";
preg_replace('/'.$param.':[0-9]*/', $param.':'.($n + $m[1]), $this->CUser[0]['info']);echo $n.' '.$this->CUser[0]['info']."\n";exit;
}
else if($this->CUser[0]['info']=='')$this->CUser[0]['info'] = $param.':'.$n;
else $this->CUser[0]['info'] .= ','.$param.':'.$n;
}
суть такова - $this->CUser[0]['info'] = "v:6,p:1,n:2";
в эту функцию подается $param, который может быть равный "р", "а" или любой другой букве. $n - это число, на которое нужно увеличить следующее за $param значение, которое всегда отделяется от символа двоеточием и может быть только числовым.
помогите пожалуста составить регилярное выражение что бы все работало, потому что то что у меня щас (то которое написано выше) оно не работает...
заранее спасибо
Спустя 13 минут, 18 секунд (27.08.2011 - 21:39) neadekvat написал(а):
$str = 'v:6,p:1,n:2';
$param = 'p';
$n = 3;
$func = create_function('$match', "return \$match[0] + $n;");
$str = preg_replace_callback("#(?<=$param:)([0-9]+)#", $func, $str);
echo $str; // v:6,p:4,n:2
Спустя 54 минуты, 13 секунд (27.08.2011 - 22:33) John Cena написал(а):
спасибо, получилось...
еще если не сложно то можете объяснить что значит "?<=", почему там две пары скобок и почему в $func слаживается $match[0], а не $match[1]
еще если не сложно то можете объяснить что значит "?<=", почему там две пары скобок и почему в $func слаживается $match[0], а не $match[1]
Спустя 3 минуты, 4 секунды (27.08.2011 - 22:36) neadekvat написал(а):
Цитата (John Cena @ 27.08.2011 - 23:33) |
слаживается |
складывается ><