竟然输出d,我的本意是要输出243。
(没用过php)加个@试试:
(@"(\d+)",$str,$tmp);--------------------------------
竟然没有输出
p*:
*是0到多匹配,(这里的0你可以理解为NULL(一种“空“))
你的表达式radf243bd apple会从r开始一个字符一个字符匹配到e
也就是说,不是你得不到值,而是第一次得不到,得一个一个字符匹配到p才能得到
可以改为 P+ 即可,引擎会从第一个p开始得到匹配--------------------------------------------------
才会输出app。
ap* 因为p前面的a并不在*的范围内,正则引擎会将之视为“普通文本”
    所以引擎会在第一个a的出现起开始匹配

解决方案 »

  1.   

    你使用的是POSIX风格的正则函数。其字符类形式为[:alnum:],[:alpha:] ...
    而你使用的模式 \d 是兼容perl的字符类形式,此时你必须用perl_match 之类的兼容perl的正则函数。
    有两种方法可以修改你的错误:
    1)
    ereg("([[:digit:]]+)",$str,$tmp); //ereg("([0-9]+)",$str,$tmp);2)
    用效率更高的perl_match()
      

  2.   

    里面有你要的:
    http://blog.csdn.net/deroshia/
      

  3.   

    $str="radf2433d3bd app**443*le";
    $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 />";
    }
      

  4.   

    php中的正则函数还是用preg开头的兼容perl的功能强大些