preg_match,正则表达式,php,从html中提取文本

时间:2010-05-22 04:01:49

标签: php regex preg-match

我正试图从http://www.auctionarms.com/search/displayitem.cfm?itemnum=9736364&oh=216543中提取“佛罗里达(佛罗里达州)”。  我的代码是

//get location
   $pattern = "/(State)</i>:</td>(.*)</td>/";
   preg_match_all($pattern, $htmlContent, $matches);
   print_r($matches);
知道为什么不工作吗?

2 个答案:

答案 0 :(得分:1)

如果正则表达式中有(State),它会将输入字符串中的术语State作为一组匹配,它与输入中的字面括号不匹配 - 您需要转义与/ s - /\(State\)<\/...一样。

然后问题是周围有很多空白(包括新行 - 你需要包含m修饰符),并且标题周围有一个<b/>标记,你似乎没有包含在正则表达式中。即使您解决了这些问题,您仍然非常依赖于您正在抓取的网站所使用的确切标记。这是尝试使用正则表达式解析HTML时遇到的一般问题。最好使用HTML解析器(例如,创建新的DOMDocument并调用其loadhtml方法)。

答案 1 :(得分:0)

我相信原因是因为你想要匹配的字符串在下一行。您需要启用多行模式:

$pattern = "/\(State\)<\/i>\:<\/td>(.*)<\/td>/m";

但请记住:尝试用正则表达式解析HTML会让不圣洁的孩子为处女的血液哭泣。参见:

RegEx match open tags except XHTML self-contained tags