Wonko the Sane
Wonko the Sane

Reputation: 832

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

Upvotes: 11

Views: 20111

Answers (1)

Martin Konecny
Martin Konecny

Reputation: 59691

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

Upvotes: 25

Related Questions