【发布时间】:2011-07-18 03:25:47
【问题描述】:
对此可能有一个非常简单的答案,但我想尽可能详细,这样你就不需要我澄清了。
我正在尝试收集每个的内容
<content><div>CONTENT</div></content>
内容需要作为反向引用返回 ($1)。 content 和 div 都有不同的参数(例如style="color: white;")。这些参数并不重要,但仍然存在。
复杂之处在于 div 可能包含子 div。这些并不重要,但与我当前的正则表达式冲突 - 尽早停止匹配。
这是一个代码示例,想象一下这个复制/粘贴了几次并且格式不同。
<entry>
<title>A general title of a post</title>
<content type="xhtml">
<div xmlns="http://www.w3.org/1999/xhtml">
This is a description of the title. It may <b>contain bold text</b> or <div>even divs</div>, and everything else. It is not quite important to save these tags, but they exist nonetheless.
</div>
</content>
</entry>
目前,我正在使用两个正则表达式代码。一个用于声明,一个用于结束标记。这可行,但现在我需要对内容执行代码。所以,我会用preg_replace_callback(),但是我不知道怎么把两者联系起来,这样中间就是回调了。
声明:
<content \w+\s*=\s*\".*?\">[\r\n\s]{0,}<div \w+\s*=\s*\".*?\">
结束:
</div>[\r\n\s]{0,}</content>
我需要将这些结合起来,并将内容作为回调返回。我尝试过类似([\w\W]{0,}) 的方法,它绝对会返回所有内容,但这场比赛不会在结束 div 处停止。
所以我发现了\bFULLWORD\b 命令,并把\bdiv\b 扔在上面......但我没有成功让它工作。也许它不受 PHP 支持?或者我很笨。
我不知道。
请帮忙!
【问题讨论】:
-
不要使用正则表达式来操作 HTML:使用 DOM -- 参见
DOMDocument类:fr2.php.net/domdocument -
请看link
-
这次我必须同意^^ “他说耶和华!”。只有通过大量的努力和递归正则表达式才能匹配嵌套标签。使用更简单的方法,例如phpQuery or QueryPath 来提取内容。
qp($html)->find("content div")->text();
标签: php regex rss preg-replace preg-replace-callback