Skip to content
Advertisement

Deleting text between two strings in php using preg_replace

I’ve been trying to remove a section of text from a string the sites betweem two tags. For example:

This is CROPSTART not very CROPEND cool.

…should become this…

This is cool.

This is the PHP I’ve tried and generally it works:

preg_replace('#//CROPSTART[sS]+//CROPEND#', '', $string);

However, when the string contains multiple “CROPEND” it crops everything from the CROPSTART to the last CROPEND. I would like it to only crop between the first CROPSTART and the first CROPEND.

Anyone know how to do this?

Thanks Wonko

Advertisement

Answer

However, when the string contains multiple “CROPEND” it crops everything from the CROPSTART to the last CROPEND.

This is because your + operator is greedy – it won’t stop at the first instance of CROPEND and continue until it encounters the last instance.

You can use a non-greedy version of the + operator simply by appending a ? after it:

preg_replace('/CROPSTART[sS]+?CROPEND/', '', $string);
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement