当前位置: 首页 > 知识库问答 >
问题:

PHPpreg_match匹配html元素

狄宇
2023-03-14

好的,所以我有一个正则表达式,我试图用它来匹配一些html文件中的特定模式。下面是preg_match语句:

preg_match('@<'.$htmlElementType.' id\s*=\s*"{{ALViewElement_'.$this->_elementId.'}}".*>[\s\S]*</'.$htmlElementType.'(>)@i', $htmlString, $newMatches, PREG_OFFSET_CAPTURE)

明确地说,这是试图匹配一个id为{ { ALViewElement _ }的html元素。*}}但它也需要以结束标记结束,例如,如果$htmlElementType是“section ”,它将以“/section”结束

如果我的html看起来像这样,里面没有其他内容,那么它就如预期的那样工作:

<section id="{{ALViewElement_resume}}">
            <!--{{RESUME_ADD_CHANGE_PIECE}}-->
            <!--{{RESUME}}-->
        </section>

问题是当我们在 html 后面有一个 section 元素并且它还有一个结束 /section 时

<section id="{{ALViewElement_resume}}">
            <!--{{RESUME_ADD_CHANGE_PIECE}}-->
            <!--{{RESUME}}-->
        </section>
        <div>

        </div>
        <section>
            HEY THIS IS ME
        </section>

在这种情况下,全马赫就是上面的一切。但我希望它停在打开我的第一个。这很重要,因为稍后在我的代码中,我需要最后一个

有什么想法可以稍微改变一下这个正则表达式吗?

感谢您的帮助!

共有1个答案

魏君博
2023-03-14

是的,只需使用不贪婪的量词:

preg_match('@<'.$htmlElementType.' id\s*=\s*"{{ALViewElement_'.$this->_elementId.'}}".*?>[\s\S]*?</'.$htmlElementType.'(>)@i', $htmlString, $newMatches, PREG_OFFSET_CAPTURE)

另一种方式:使用 DOMDocument:

$html = <<<LOD
<section id="{{ALViewElement_resume}}">
        <!--{{RESUME_ADD_CHANGE_PIECE}}-->
        <!--{{RESUME}}-->
</section>
<div>

</div>
<section>
    HEY THIS IS ME
</section>
LOD;
$doc= new DOMDocument();
@$doc->loadHTML($html);
$node = $doc->getElementById("{{ALViewElement_resume}}");

$docv = new DOMDocument();
$docv->appendChild($docv->importNode($node, TRUE));
$result = $docv->saveHTML();
echo htmlspecialchars($result);
 类似资料:
  • 是否可以将div中所有元素的底部对齐在一起?我有一个标题div,它将包含我的网站名称,以及一个小菜单。小菜单有3个链接,它们都在同一级别,但我有一个图像和一个svg标签(自定义购物车点),位于菜单链接上方一点。网站标题位于所有菜单上方。我当前的代码给我这个结果: 注意标题是如何位于右侧菜单上方的,而facebook图像和定制购物车是如何位于菜单上方的?我希望所有这些元素的底部能够匹配。这可能吗?

  • 什么字符类或Unicode属性将匹配Perl中的任何Unicode元音? 错误答案:。(此处布道,洗衣清单中的第24项) perluniprops只提到朝鲜文和印度文的元音。 让我们把元音是什么的问题放在一边。是的,

  • 我在一个3000行的excel工作表中有一个简单的公式,有没有办法只返回一定百分比的顶部匹配单元格。我只想显示符合我条件的前 9%(270 行)并隐藏其他行 这是我的公式: 我用数据透视表做了这件事,但想在同一个表格中用同一个公式添加它以得到我需要的东西。谢谢。

  • 我正在尝试更新Dynamodb表用户中的一项。我尝试了许多不同的方法,但总是收到相同的错误消息: 提供的键元素与架构不匹配 项目的创建与查询一样有效,但更新不起作用。当我在DynamoDB上检查时,用户创建得很好: 下面是表格信息: 表名:用户 主分区键:电子邮件(字符串) 主排序键:注册(编号) 下面是代码(从lambda调用): 你知道我的代码中可能有什么错误吗?

  • 我必须在Elasticsearch中构造一个非常重要的查询(现在看来是这样)。假设我有两个实体,每个实体都有一个数组元素,由字符串组成: 数组元素的映射如下(使用动态模板): 实体的Json表示如下: 然后我有了用户输入:['A','B','C']。 我想要实现的是找到只包含输入中指定元素的实体——预期结果是:[A'、[B']、[A'、[C']、[A'],但不是['A'、[E'](因为用户输入中不

  • 使用Mockito,我想一个参数列表中包含的方法调用,但我没有找到如何编写这一点。 我只想要类似于的东西,如何使用Mockito实现这一点?