恳请哪位高手露两手帮看看俺的代码有什么问题!<?php
    //error_reporting(E_ALL & ~E_NOTICE);
$dir='aaaa';//获取根目录
$handle=opendir($dir."."); //打开目录
while (false !== ($file = readdir($handle)))
{
   if ($file != "." && $file != "..") 
    {
  $data= file_get_contents($dir.'/'.$file); 
  //$pattern="/ .*>(.*?)<o:p><\/o:p><\/span><\/b><\/p>\r\n(.*)<\/td>\r\n(.*)<\/tr>\r\n(.*)<\/table>\r\n/";
  $pattern="/ .*>(.*?)<o:p><\/o:p><\/span><\/b>/";
  preg_match($pattern,$data,$result);
  print_r( $file);
  print_r($result[1])."<br/>";
     }
    }
closedir($handle); //关闭打开的目录
?> 
下面是被读取的文件的源代码。    <p class=MsoNormal style='mso-pagination:widow-orphan'><b style='mso-bidi-font-weight:
  normal'><span lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:宋体;
  mso-bidi-font-family:宋体;color:black;mso-font-kerning:0pt'>35<o:p></o:p></span></b></p>
  </td>
 </tr>
</table>
我只想读取数字35.请问我的正则表达式正确吗?应该怎么写?为什么运行时老提示“Notice: Undefined offset: 1 in D:\htdocs\dfb\ex.php on line 14”。

解决方案 »

  1.   

    $data =<<< TXT
    <p class=MsoNormal style='mso-pagination:widow-orphan'><b style='mso-bidi-font-weight:
      normal'><span lang=EN-US style='mso-bidi-font-size:10.5pt;font-family:宋体;
      mso-bidi-font-family:宋体;color:black;mso-font-kerning:0pt'>35<o:p></o:p></span></b></p>
    TXT;
    $pattern="/ .*>(.*?)<o:p><\/o:p><\/span><\/b>/";
    preg_match($pattern,$data,$result);
    print_r($result[1])."<br/>";
    35代码本身没错
    但你是在遍历目录中的每一个文件,不能保证每个文件里都有符合条件的内容吧?
      

  2.   

    很明显是print_r($result[1])里的这个1有问题了,因为如果preg_match($pattern,$data,$result);这个匹配不到你写的正则的内容,也就是result这个变量没有下标1了,所以就报错了。你可以把print_r($result[1])."<br/>";做个判断,if(isset($result[1])){}这样就不会报错了。
      

  3.   

    preg_match($pattern,$data,$result);
    print_r( $file);
    print_r($result[1])."<br/>";这了写作
    if(preg_match($pattern,$data,$result)) {
      print_r( $file);
      print_r($result[1])."<br/>";
    }