我正试图从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);知道为什么不工作吗?
答案 0 :(得分:1)
如果正则表达式中有(State)
,它会将输入字符串中的术语State
作为一组匹配,它与输入中的字面括号不匹配 - 您需要转义与/
s - /\(State\)<\/...
一样。
然后问题是周围有很多空白(包括新行 - 你需要包含m
修饰符),并且标题周围有一个<b/>
标记,你似乎没有包含在正则表达式中。即使您解决了这些问题,您仍然非常依赖于您正在抓取的网站所使用的确切标记。这是尝试使用正则表达式解析HTML时遇到的一般问题。最好使用HTML解析器(例如,创建新的DOMDocument
并调用其loadhtml
方法)。
答案 1 :(得分:0)
我相信原因是因为你想要匹配的字符串在下一行。您需要启用多行模式:
$pattern = "/\(State\)<\/i>\:<\/td>(.*)<\/td>/m";
但请记住:尝试用正则表达式解析HTML会让不圣洁的孩子为处女的血液哭泣。参见: