2010-05-22 110 views
0

我试图从http://www.auctionarms.com/search/displayitem.cfm?itemnum=9736364&oh=216543中提取“Florida(FL)”。 我的代码是preg_match,regexp,php,从html中提取文本

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

+0

这似乎是SO的不变口头禅:避免使用正则表达式来解析html,如果可能的话。它不是工作的工具。 – 2010-05-22 04:20:31

回答

0

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

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

但要记住:在尝试用正则表达式解析HTML,使邪恶的孩子哭处女的血。请参阅:

RegEx match open tags except XHTML self-contained tags

1

当你在一个正则表达式有(State),它将术语State输入字符串作为小组赛,也不会在输入文字相匹配括号 - 你需要逃脱他们与您的/ s - /\(State\)<\/...一样。

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

+0

我在建议HTML解析器,但在看了网页后,我改变了主意......没有课,没有ID,没有CSS;很难找到State这个词。 – 2010-05-22 05:46:25