3

我检查了其他答案,但似乎无法执行以下操作。请帮助某人:)

我想删除介于两者之间的所有内容,包括特定的 html 注释

HTML:

Some HTML that must stay
<!-- START IF USER_ID -->
some html that must go
<!-- END IF USER_ID -->
Some more HTML that's gotta stay
<!-- START IF USER_ID -->
this also needs to go
<!-- END IF USER_ID -->

因此,介于两者之间的所有内容<!-- START IF USER_ID -->以及<!-- END IF USER_ID -->评论本身都需要删除

我的 preg_replace 模式(这显然是错误的):

"/<!-- START IF USER_ID -->.*?<!-- END IF USER_ID -->/"

结果应该是

Some HTML that must stay
Some more HTML that's gotta stay

感谢您提前检查并提供答案:)

4

2 回答 2

8

谢谢@mlwacosmos - 使用您提供的链接。

通过以下方式实现:

$startPoint = '<!-- START IF USER_ID -->';
$endPoint = '<!-- END IF USER_ID -->';
$result = preg_replace('#('.preg_quote($startPoint).')(.*)('.preg_quote($endPoint).')#siU', '', $html);
于 2012-12-11T16:43:38.283 回答
3

那个正则表达式看起来不错。使用m修饰符使点匹配换行符:

"/<!-- START IF USER_ID -->.*?<!-- END IF USER_ID -->/m"

或者,您可以[\s\S]用作替代品:

"/<!-- START IF USER_ID -->[\s\S]*?<!-- END IF USER_ID -->/"
于 2012-12-11T16:43:53.470 回答