使用 preg_replace 删除带空格的 HTML 部分
Using preg_replace to remove part of HTML with spaces
我正在尝试使用 preg_replace 在 CMS 中查找和删除部分页面。
这是我想删除的代码示例:
<dt>
<label for="my_label">My label:</label>
</dt>
<dd>
<select name="my_label" id="my_label">
<option value="0" selected="selected">option 0</option>
<option value="1">option 1</option>
<option value="2">option 2</option>
<option value="3">option 3</option>
</select>
</dd>
选项可以是动态的,它们取决于配置文件中的用户设置。
在此处提出的其他问题的许多提示的帮助下,我能够做到这一点:
preg_replace('#(?<=<label for="my_label">)(.*?)(?=<\/select>)#ms', '', $html);
效果很好,但有一个小问题我似乎无法解决 - 输出如下所示:
<dt>
<label for="my_label"></select>
</dd>
是否可以通过对我上面写的 preg_replace 进行一些修改来删除它?
我故意发布带有空格的代码,因为我认为注册 exp 很重要。
要删除整个块,请使用以下命令:
preg_replace('!(<dt>\s+<label for="my_label">.*?</dd>)!ms', '', $t);
\s 是任意空格
.*?将在 之前匹配尽可能少的字符以仅删除此块
(您可以在这里找到更多信息:http://php.net/manual/de/regexp.reference.escape.php)
我正在尝试使用 preg_replace 在 CMS 中查找和删除部分页面。
这是我想删除的代码示例:
<dt>
<label for="my_label">My label:</label>
</dt>
<dd>
<select name="my_label" id="my_label">
<option value="0" selected="selected">option 0</option>
<option value="1">option 1</option>
<option value="2">option 2</option>
<option value="3">option 3</option>
</select>
</dd>
选项可以是动态的,它们取决于配置文件中的用户设置。
在此处提出的其他问题的许多提示的帮助下,我能够做到这一点:
preg_replace('#(?<=<label for="my_label">)(.*?)(?=<\/select>)#ms', '', $html);
效果很好,但有一个小问题我似乎无法解决 - 输出如下所示:
<dt>
<label for="my_label"></select>
</dd>
是否可以通过对我上面写的 preg_replace 进行一些修改来删除它? 我故意发布带有空格的代码,因为我认为注册 exp 很重要。
要删除整个块,请使用以下命令:
preg_replace('!(<dt>\s+<label for="my_label">.*?</dd>)!ms', '', $t);
\s 是任意空格 .*?将在 之前匹配尽可能少的字符以仅删除此块 (您可以在这里找到更多信息:http://php.net/manual/de/regexp.reference.escape.php)