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