0

对此可能有一个非常简单的答案,但我想尽可能详细,这样您就不需要我澄清了。

我正在尝试收集每个

<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 支持?或者我很傻。

我不知道。

请帮忙!

4

2 回答 2

2

以前有人说过,现在也有人说过,不幸的是,它又要被人说了。正则表达式是一个很棒的工具。它非常适合操作字符串和正则表达式的模式匹配。

HTML 不是字符串。HTML 是一种标记语言,而不是常规语言。它实际上不是一个字符串,但可以解释为一个字符串(因此,我们可以在技术上使用正则表达式来操作 HTML)。HTML 是基于元素节点的自己的语言,如果您要更改某些内容,则需要操作这些元素。

正如评论中所指出的,您可以轻松地在 PHP 中使用DOM 类。

你想这样做有很多原因:

  • 更简单,您不需要制作一些看起来像猫从键盘上走过的疯狂图案
  • 它更容易(再次),您可以导航到特定节点,而不是使用整个文档。
  • 更安全,您不会意外更改您不想更改的内容
  • 它(再次)更安全,源数据可以更改,您可以检测到它并对其进行解释。
  • 它更安全(再次),你可以优雅地失败。

如何?

于 2011-03-18T13:38:40.253 回答
-2

使用 DOM 解析器。这是一个例子:http ://htmlparsing.com/php.html

于 2011-03-18T18:43:11.327 回答