Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Preg_替换标记之间的数据,并考虑文档中的其他标记_Php_Regex_Rss_Preg Replace_Preg Replace Callback - Fatal编程技术网

PHP Preg_替换标记之间的数据,并考虑文档中的其他标记

PHP Preg_替换标记之间的数据,并考虑文档中的其他标记,php,regex,rss,preg-replace,preg-replace-callback,Php,Regex,Rss,Preg Replace,Preg Replace Callback,对此可能有一个非常简单的答案,但我希望尽可能详细,以便您不需要我澄清 我正在收集每一本书的内容 <content><div>CONTENT</div></content> 目前,我使用两个正则表达式代码。一个用于声明,一个用于结束标记。这是可行的,但现在我需要对内容执行代码。因此,我将使用preg\u replace\u callback(),但我不知道如何将两者连接起来,以便中间是一个回调 声明: <content \w+\s*=\s*\

对此可能有一个非常简单的答案,但我希望尽可能详细,以便您不需要我澄清

我正在收集每一本书的内容

<content><div>CONTENT</div></content>
目前,我使用两个正则表达式代码。一个用于声明,一个用于结束标记。这是可行的,但现在我需要对内容执行代码。因此,我将使用
preg\u replace\u callback()
,但我不知道如何将两者连接起来,以便中间是一个回调

声明:

<content \w+\s*=\s*\".*?\">[\r\n\s]{0,}<div \w+\s*=\s*\".*?\">
[\r\n\s]{0,}
结束:

</div>[\r\n\s]{0,}</content>
[\r\n\s]{0,}
我需要将这些内容组合起来,并将其作为回调返回。我尝试过类似于
([\w\w]{0,})
,它绝对返回所有内容,但此匹配不会在结束div处停止

所以我发现了
\bFULLWORD\b
命令,并在该命令上抛出了
\bdiv\b
。。。但我没有成功地让它发挥作用。也许PHP不支持它?或者我很愚蠢

我不知道


请帮忙

以前有人说过,现在也有人说过,不幸的是,以后还会有人说。正则表达式是一个很棒的工具。它非常适合处理字符串和正则表达式的模式匹配

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

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

您希望这样做的原因有很多:

  • 更简单的是,你不需要做一些看起来像猫在键盘上走过的疯狂图案
  • 更简单的是,您可以导航到特定节点,而不必处理整个文档
  • 这样更安全,你不会意外地改变你不想做的事情
  • 更安全的是(再次),源数据可以更改,您可以检测并解释它
  • 更安全的是,你可以优雅地失败
怎么做

  • 检查上面链接的手册
  • 只要谷歌就可以了。您已经学习了正则表达式,这要简单得多

使用DOM解析器。这里有一个例子:

不要使用正则表达式来操作HTML:使用DOM——请参见
DOMDocument
类:请参见我必须同意这次的^^“他说了Jehova!”。只有在大量工作和递归regexp的情况下才能匹配嵌套标记。使用更简单的方法,例如提取内容<代码>qp($html)->查找(“内容div”)->文本()</div>[\r\n\s]{0,}</content>