【发布时间】:2010-08-22 14:00:00
【问题描述】:
preg_match 有一个奇怪的问题。我正在使用一个抓取文章标题的正则表达式,基本上是寻找标签:
preg_match('#(\<title.*?\>)(\n*\r*.+\n*\r*)(\<\/title.*?\>)#', $data, $matches)
当我打印出 $matches 数组时,我什么也得不到。但是当我在正则表达式测试器中尝试同样的事情时,它工作得很好。我什至尝试放入一个绝对匹配它的字符串来代替 $data 变量,但没有任何运气。
我在这里做错了什么?
【问题讨论】:
-
您是否正在尝试匹配 XML 文件中的
标记或其他内容。您能否更具体一些,并提供一些您尝试匹配的字符串示例:) -
请勿使用正则表达式解析 HTML 或 XML 结构
-
你应该改用 PHP 的原生 DOM 函数:php.net/manual/en/book.simplexml.php
-
传入的数据是任意文章。现在我正在测试我使用 CURL 获得的一些 cnn 文章。我将该页面放入一个变量中并尝试对其进行预匹配。我知道它正确地拉入了文章,因为我可以呼应那篇文章。但即使我尝试: preg_match('#(\
)(\n*\r*.+\n*\r*)(\)#' , ' 这是一个标题 ', $matches);并为 preg 匹配尝试一个简单的标题字符串,然后它仍然没有给我任何结果。 -
如果使用 PHP 的原生 DOM 函数失败,你应该使用Simple HTML DOM parser 寻求庇护,这更容易原谅 HTML 损坏的罪过。