php preg_replace everything in between specific ht

2020-02-29 10:18发布

I've checked other answers but can't seem to do the following. Please help someone :)

I want to remove everything in between and including specific html comments

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 -->

So everything in between <!-- START IF USER_ID --> and <!-- END IF USER_ID --> and the comments itself needs to go

My preg_replace pattern (which is obviously wrong):

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

Result should be

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

Thanks for checking and for the answers in advance :)

2条回答
别忘想泡老子
2楼-- · 2020-02-29 10:41

Thanks @mlwacosmos - Using the link you provided.

Achieved with:

$startPoint = '<!-- START IF USER_ID -->';
$endPoint = '<!-- END IF USER_ID -->';
$result = preg_replace('#('.preg_quote($startPoint).')(.*)('.preg_quote($endPoint).')#siU', '', $html);
查看更多
Anthone
3楼-- · 2020-02-29 11:02

That regex looks fine. Use an m modifier to make the dot match newlines:

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

Alternatively, you could use [\s\S] as a substitute:

"/<!-- START IF USER_ID -->[\s\S]*?<!-- END IF USER_ID -->/"
查看更多
登录 后发表回答