Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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[\s\S]+\/\/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

like image 837
Wonko the Sane Avatar asked May 23 '15 01:05

Wonko the Sane


1 Answers

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[\s\S]+?CROPEND/', '', $string);
like image 93
14 revs, 12 users 16% Avatar answered Nov 01 '22 04:11

14 revs, 12 users 16%