简体   繁体   中英

php preg_replace everything in between specific html comment tags

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM