[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: регулярные выражения
John Cena
доброе время суток.

есть строка 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]

Спустя 3 минуты, 4 секунды (27.08.2011 - 22:36) neadekvat написал(а):
Нет, не могу.
Читай статью на Википедии (хотя бы), описание функции, а в идеале - Фридла.

Цитата (John Cena @ 27.08.2011 - 23:33)
слаживается

складывается ><
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.