Preg_match忽略新行或制表符

时间:2014-03-02 11:36:12

标签: php web-scraping preg-match

我的html输出源是这样的

<td><span class="bookdetailtitle">ISBN</span></td>
                            <td>:</td>
                            <td>9788172338299</td>

我只需要打印9788172338299。如果上面的代码在同一行,它会正确打印。但由于有新的行和标签,我没有得到输出。我尝试用/ s替换/ i,但没有工作。我希望preg_match匹配字符串而不管新行或制表符,并打印所需的输出。

这是我的代码:

$page2='<td><span class="bookdetailtitle">ISBN</span></td>
                            <td>:</td>
                            <td>9788172338299</td>';

preg_match('/<td><span class="bookdetailtitle">ISBN<\/span><\/td><td>:<\/td><td>(.*)<\/td>/s', $page2, $keywords);
echo $keywords_out = $keywords[1];

1 个答案:

答案 0 :(得分:0)

如果你只需要数字,这样的话?

$page2='<td><span class="bookdetailtitle">ISBN</span></td>
                            <td>:</td>
                            <td>9788172338299</td>';

preg_match('/<td>+[0-9]+<\/td>/', $page2, $keywords);
print_r($keywords); 

<强> http://phpfiddle.org/main/code/43j-t8b

P.S。很多人会说 - 不要使用正则表达式来解析html。我同意。 :)

我会做这样的事情:

$page=explode('<td>',$page2);
print_r($page[3]);

<强> http://phpfiddle.org/main/code/buf-95c

编辑:摆脱最后的td - &gt; print_r(strip_tags($page[3]));