<?
$a='|info(-(page\d+)_(\d+))*\.html|';
$b=array(
"info.html",
"info-page11_22.html",
"info-page33_44.html",
"info-page1_2-page3_4.html",
"info-page3_4-page1_2.html",
);
foreach($b as $key=>$val){
preg_match_all($a,$val,$val);
print_r($val);
}最后两个,没有匹配出page1_2和page3_4
$a='|info(-(page\d+)_(\d+))*\.html|';
$b=array(
"info.html",
"info-page11_22.html",
"info-page33_44.html",
"info-page1_2-page3_4.html",
"info-page3_4-page1_2.html",
);
foreach($b as $key=>$val){
preg_match_all($a,$val,$val);
print_r($val);
}最后两个,没有匹配出page1_2和page3_4
===========================
$x = '-1-2-3-4-5';
//preg_match_all('/(-\d)*/',$x,$m);//匹配字符串本身,和最后一个-\d
preg_match_all('/-\d/',$x,$m);//匹配所有-\d
print_r($m);exit;
只是期望中间某个子匹配()能在数组中全部反应出来,结果却只显示了多次匹配的最后一个想知道php是不是有些什么规定对多次匹配只显示最后一个呢?
例如/a(b)+c/ 匹配“abbbbbbbbbbbbbc”为何只显示一个b呢?
$a='|-(page\d+)_(\d+)|';当然这个把前面的info和后面的.html去掉了,
也许可以先preg_match一下前后的info和html,
然后在用preg_match_all匹配内部的?