php - 如何使用 preg_replace 将类名注入(inject) html 节点?

标签 php html regex preg-replace inject

我给自己设定了这个听起来相当简单的挑战,但现在我一直在努力弄清楚如何将类名注入(inject)到 <body> 中。我的文档的 dom 元素

复杂性是因为我无法控制通过 file_get_contents 获得的 HTML 标记功能(第三方通过 FTP 提供文件)。

所以 body元素可以是多种不同的方式,例如:

<body>
<body id="my-id" data-attribute="content">
<body data-attribute="content">
<body class="already-existing-class" id="my-id" data-attribute="content">

等等……甚至上述属性的顺序都不在我的控制之下,所以你可能有一个 class=id= 之前等等。

我想你们都明白我在这里谈论的复杂性; (我希望)

我基本上需要的是一种使用 preg_replace() 的方法注入(inject)一个新类到或者一个现有的class body 上的属性(如果已经存在)添加 class在其中添加我的新类。

如有任何帮助,我们将不胜感激。

如果已经有人回答过,请随时指出。我尝试搜索,但使用如此通用的术语很难找到我要找的东西。

感谢阅读。

J.

最佳答案

要提供一个close 仅 RegEx 的解决方案,只要多余的空格不打扰您,它就可以工作;-)

<?php

$pat = '/(<body) ?(([^>]*)class="([^"]*)")?/';
$inp = '<body>
<body id="my-id" data-attribute="content">
<body data-attribute="content">
<body class="already-existing-class" id="my-id" data-attribute="content">
<body id="my-id" data-attribute="content" class="abc">';

echo preg_replace($pat, '$1 $3 class="$4 new-class" ', $inp);

?>

检查 ideone用于输出。

关于php - 如何使用 preg_replace 将类名注入(inject) html 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8513970/

相关文章:

regex - 使用 curl 列出文件

php - 在给定时间后自动终止 Linux 进程/php 脚本

php - 如何在 woocommerce 结账的订单接收页面上更改送货地址和账单地址的文本?

Javascript 按键 addEventListener

php - PHP 中的 MySQL 查询不会打印结果

html - 多行内联元素两侧不需要的空间

java - 将阿拉伯文本与正则表达式匹配

javascript - 替换 JavaScript 中字符之间的多个字符串

php - 如何从for循环以递增方式将文件名存储在php变量中

php - 使用 PHP 和 CSS 显示图像