竟然输出d,我的本意是要输出243。
(没用过php)加个@试试:
(@"(\d+)",$str,$tmp);--------------------------------
竟然没有输出
p*:
*是0到多匹配,(这里的0你可以理解为NULL(一种“空“))
你的表达式radf243bd apple会从r开始一个字符一个字符匹配到e
也就是说,不是你得不到值,而是第一次得不到,得一个一个字符匹配到p才能得到
可以改为 P+ 即可,引擎会从第一个p开始得到匹配--------------------------------------------------
才会输出app。
ap* 因为p前面的a并不在*的范围内,正则引擎会将之视为“普通文本”
所以引擎会在第一个a的出现起开始匹配
(没用过php)加个@试试:
(@"(\d+)",$str,$tmp);--------------------------------
竟然没有输出
p*:
*是0到多匹配,(这里的0你可以理解为NULL(一种“空“))
你的表达式radf243bd apple会从r开始一个字符一个字符匹配到e
也就是说,不是你得不到值,而是第一次得不到,得一个一个字符匹配到p才能得到
可以改为 P+ 即可,引擎会从第一个p开始得到匹配--------------------------------------------------
才会输出app。
ap* 因为p前面的a并不在*的范围内,正则引擎会将之视为“普通文本”
所以引擎会在第一个a的出现起开始匹配
而你使用的模式 \d 是兼容perl的字符类形式,此时你必须用perl_match 之类的兼容perl的正则函数。
有两种方法可以修改你的错误:
1)
ereg("([[:digit:]]+)",$str,$tmp); //ereg("([0-9]+)",$str,$tmp);2)
用效率更高的perl_match()
http://blog.csdn.net/deroshia/
$rearray=array();
if(preg_match_all('/[\d]*/',$str,$match)){
if($match[0]){
foreach($match[0] as $value){
if($value){
$rearray[]=$value;
}
}
}
}
for($i=0;$i<count($rearray);$i++){
echo "第".($i+1)."个匹配项:".$rearray[$i]."<br />";
}