使用preg_match()或preg_match_all()匹配网页中的字符串(多行)

时间:2012-10-15 14:56:57

标签: php

  

可能重复:
  How to parse and process HTML with PHP?

我有以下HTML输出我希望匹配来自它的数据,尝试使用preg_match()和preg_match_all()但没有成功。

<td width="130" valign="top">
Jane Doe<br />
            101 Marisa Cir <br />
            Staten Island NY, 10309<br /><br>

我希望将“地址数据”匹配为:

  

Jane Doe,101 Marisa Cir Staten Island NY,10309

我用CURL获取页面。我试过这样的事情没有成功:

preg_match('~<td width="130" valign="top">(.*?[^<])<br /><br>~i', $str, $showme);

2 个答案:

答案 0 :(得分:0)

[^<]将匹配任何不是<的内容,因此它不会接受每行末尾的两个<br/>。如果你只是尝试会发生什么:

preg_match('~<td width="130" valign="top">(.+?)<br /><br>~i', $str, $showme);

如果您想在之后移除这些<br/>代码,可以将其替换掉。

答案 1 :(得分:0)

您需要拥有s修饰符,如here所述。它使得点匹配新线。因为您的文本是多行,所以您需要s修饰符。您可以使用这样的正则表达式:

preg_match_all('~"top">(.*?)<br />(.*?)<br />(.*?)<br /><br>$~s', $text, $matches);

这应该有效。请参阅键盘示例here