preg_match_all("/手&nbsp;&nbsp;&nbsp;&nbsp;机:<\/td> <td>15981862112/",$info,$moblephone);
  echo $moblephone[0][0];我用上面的正则匹配 下面的一句话 为什么不显示呢?$info = '<td width="80" class="pre_res_title_tdn">联系方式</td> <td>&nbsp;</td> <td width="20"></td> </tr> </table></td> </tr> <tr> <td><table width="620" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="420"><table width="420" border="0" align="center" cellpadding="0" cellspacing="0" class="pre_res_txt"> <tr> <td width="14">&nbsp;</td> <td width="80">手&nbsp;&nbsp;&nbsp;&nbsp;机:</td> <td>15981862112</td> </tr> <tr> <td width="14">&nbsp;</td> ';直接复制了 里面的内容 竟然也匹配不上 是不是里面的html字符在作怪?

解决方案 »

  1.   

    你那的那段内容在我机器可以匹配到,如果你的$info是从数据库里弄出来的,或读文件读进来的,我建议你先确保脚本编码和来向编码一致,否则永远匹配不了,此问题我曾遇到过
      

  2.   

    果然文件是GBK编码的,我修改下试试。
      

  3.   

    错误还不在编码那里,而是在 > < 这里,用\s*来匹配这里就好了。
      

  4.   


    $info =<<<HTML
    <td width="80" class="pre_res_title_tdn">联系方式</td> <td>&nbsp;</td> <td width="20"></td> </tr> </table></td>
    </tr> <tr> <td><table width="620" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="420">
    <table width="420" border="0" align="center" cellpadding="0" cellspacing="0" class="pre_res_txt"> <tr> <td width="14">
    &nbsp;</td> <td width="80">手&nbsp;&nbsp;&nbsp;&nbsp;机:</td> <td>15981862112</td> </tr> <tr> <td width="14">&nbsp;</td>
    HTML;preg_match_all("/手&nbsp;&nbsp;&nbsp;&nbsp;机:<\/td> <td>15981862112/", $info, $moblephone);
    echo $moblephone[0][0];
    我试的怎么可以匹配的到呢?
      

  5.   

    我也很纳闷,我试了好多都不行,最后把两个html标示符中间的空白用\s*匹配才匹配好了。不过昨天看dedecms 的模板,发现我在里面写了两个&nbsp;保存后再看模板修改的地方是一个空格。也许在采集的时候被采集的文件里面是多个空格,但是我在php程序里面在html 标示符中间用了一个空格,所以匹配不上。而我把代码复制到论坛上来发表,中间的多个空格又自动压缩为一个。所以你匹配上了。