【发布时间】:2021-10-26 09:21:07
【问题描述】:
我正在尝试在内容的每个段落之后插入一些文本。
我通过</p> 展开我的内容,它是使用以下代码完成的:
$Paragraphs = explode( '</p>', $Content);
foreach($Paragraphs as $Paragraph){
// Some code
}
现在我的 $Content 看起来像:
<p></p>
<p></p>
<p></p>
<div><p></p></div>
<p></p>
<p></p>
<div><p></p></div>
如果<p> 没有包含在<div> 或<table> 中,我想拆分。
你可以说</p>后面应该有一个<p>。
我读过 Regex 有助于实现它。
这是我构建的基本正则表达式:
$Pattern = '/<p(|\s+[^>]*)>(.*?)<\/p\s*>/';
if(preg_match_all($Pattern, $Content, $keywords)){
}
此正则表达式当前删除了
本身来自数组,它将内容保留在 p 中,而不是
本身,并且它不会检查它是在它之前有一个
还是在它之后有一个。
【问题讨论】:
-
为什么要使用字符串函数来做到这一点?使用 DomDocument 浏览 HTML 结构并根据需要修改标签不是更容易吗? php.net/manual/en/class.domdocument.php
-
不确定 DomDocument 是什么,但目标是在每 6 段之后插入一个广告,但忽略 div 或 table 中包含的段落..
-
是时候了解一下 DomDocument 了。这不是字符串操作的工作,而是适当的 DOM 解析器
-
在您的 XY 问题和 dom 解析器的专业实现之间,要求贡献者付出太多努力;更不用说minimal reproducible example 并不出色。我得走了,需要更多的关注。