我需要替换源代码中由标签ID标识的HTML部分,这是使用PHP的HTML和PHP的组合。如果是纯 HTML,可以使用 DOM 解析器;如果DIV中没有DIV,我可以想象如何使用preg_match。这就是我要做的 - 我有一个代码(加载到字符串中),如下所示:
<div>
<img >
</div>
<? include(); ?>
<div id="mydiv">
<div>
<div>
<img >
</div>
</div>
</div>
我的任务是用新的内容替换"mydiv"DIV 的内容,例如
<div id="newdiv>
some text
</div>
所以字符串在更改后将如下所示:
<div>
<img >
</div>
<? include(); ?>
<div id="mydiv">
<div id="newdiv>
some text
</div>
</div>
我已经尝试过:
1)使用DOMdocument的loadHTML
解析代码=>如果包含PHP代码,它会产生很多错误。
2)我玩了一下像preg_match_all('/<div id="myid"([^<]*)<'/div>/', $src, $matches)
这样的正则表达式,如果包含更多子div,它会失败。
到目前为止,我发现的最好的方法是:
1)查找id="mydiv"
字符串
2)搜索"<"和">"字符并像"<"= 1和">"=-1一样计算它们(不完全是,但它给出了想法)
3)一旦我得到sum == 0
我应该在结束标签的位置上,所以我知道,我应该交换哪个部分字符串
这是一个非常"繁重"的解决方案,在某些情况下可能会停止工作,其中代码是不同的(例如,页面上的PHP代码也包含字符,而不仅仅是简单的"include")。所以我正在寻找一些更好的解决方案。
你可以尝试这样的事情:
$file = 'filename.php';
$content = file_get_contents($file);
$array_one = explode( '<div id="mydiv">' , $content );
$my_div_content = explode("</div>" , $array_one[1] )[0];
或者像你说的那样使用preg_match:
preg_match('/<div id="mydiv"(.*?)<'/div>/s', $content, $matches)
是的,有。首先,您需要使用一个将获取文件内容的函数。让我们调用文件主页.php:
$homepageString = file_get_contents('homepage.php');
现在,您有一个包含所有内容的字符串。接下来你要做的是使用 preg_replace() 函数取出你想要取出的代码部分:
$newHomepageString = preg_replace('/id="mydiv"/',"", $homepageString);
现在,您用新的源代码覆盖现有的主页.php文件:
file_put_contents("homepage.php", $newHomepageString);
让我知道它是否对你有用! :)