непонятки с регом, левое значение матчится

sector119

Guest
непонятки с регом, левое значение матчится

echo -n "1068795307.xxx.tar.gz" |perl -ne'print "$1:$2" if /\.([^.]*?(?:\.([^.]*))?)$/'

выдает - tar.gz:gz - то что мне надо

делаю то-же в пхп
php -r '$matches=array(); $string = "1068795307.xxx.tar.gz"; preg_match("/\.([^.]*?(?:\.([^.]*))?)$/", $string, $matches); print_r($matches);'

получаю:
Array
(
[0] => .tar.gz
[1] => tar.gz
[2] => gz
)

какого милого здесь забыл нулевой элемент!? его тут не должно быть!
 

Profic

just Profic (PHP5 BetaTeam)
должно и очень должно!
нулевой элемент есть весь рег, которых проматчился.
оно и в перле есть и posix и во всех RE
 

sector119

Guest
в перл за совпадение со всем шаблоном отвечает $&!
я так понял что preg_match должен заносить в $matches только засвапленные совпадения! те что в перл попадают в $1, $2, ...
 

sector119

Guest
сори, туплю... :(

If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.
 

Profic

just Profic (PHP5 BetaTeam)
млять, а доку читать будем?
цитата оттуда
If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.
ЗЫ. Не понимаю, неужели проще спорить, чем 1 (один!) раз заглянуть в ман?
 

sector119

Guest
не нервничай, дольше проживешь! я заглянул, см. выше...
 
Сверху