使用 RegEx 移动 HTML 块

Move chunk of HTML with RegEx

我想做的是在 HTML 中找到一块有评论 chunk!--/block--> 并在 header 之后将其整体移动。问题是评论始终保持不变,但块在 Dreamweaver 中使用查找和替换的页面上有所不同。这是一个快速示例:

<!--header-->
<header>Hello</header>
<!--/header-->

这是块需要移动的地方

<h1>Hello content</h1>
<p>lorem ipsum</p>

这是块,它有一个开始注释和一个结束注释,我认为它可能被用作 RegEx 的参考,包括里面的所有内容。

<!--block-->
<p>hello world</p>
<!--/block-->

好的。您没有指定正则表达式的语言,但是这个 PHP 代码可以满足您的需要,我只是编写并测试了它。 作为奖励,我将最终结果写回了源页面。

首先你有你的原始文件,我叫我的source.php

<!--header--> <header>SO HERE IS THE HEADER</header> <!--/header-->

<div>this is information that is above ID CARR, but will be below the div ID carr once php is done executing..</div>

<div id="carr"> Phasellus laoreet dolor magna, et tempor mi dictum eu. Aenean pellentesque vulputate tortor. Vestibulum odio velit, faucibus sed dui non, laoreet facilisis sem. Curabitur a magna ligula. Cras cursus vel dui placerat posuere. Donec ullamcorper risus eu lobortis dignissim. Nullam fermentum est diam, sed lacinia sapien ornare et. </div> <div>here is more informatin on the bottom</div>

然后您有另一个名为 index.php 的页面可以满足您的需求。在这个例子中,我的目标是上面的。

<?php
$page_path = 'source.php';
$source = file_get_contents($page_path);
$regex = '#\<div id="carr">(.+?)\</div>#s';
preg_match($regex, $source, $matches);
$match = $matches[0];

$a = explode("</header>", $source);
//strip out what we found with regular expression
$first = str_replace($match, '', $source);
//append it to the place where you need it.
$final = str_replace('<!--/header-->', '<!--/header-->'.$match, $first);
echo $final;

$fp = fopen($page_path, 'w+');//w+ erases  r+ point at begining of file.
fwrite($fp, $final);
fclose($fp);

?>