deadbeef
deadbeef

Reputation: 693

Replace only first match using preg_replace

I have a string with structure similar to: 'aba aaa cba sbd dga gad aaa cbz'. The string can be a bit different each time as it's from an external source.

I would like to replace only first occurrence of 'aaa' but not the others. Is it possible?

Upvotes: 69

Views: 62550

Answers (3)

T.Todua
T.Todua

Reputation: 56497

for example, out $content is:

START 
FIRST AAA 
SECOND AAA

1) if you use:

$content = preg_replace('/START(.*)AAA/', 'REPLACED_STRING', $content);

it will change everything from the START to the last AAA and Your result will be:

REPLACED_STRING

2) if you use:

$content = preg_replace('/START(.*?)AAA/', 'REPLACED_STRING', $content);

Your Result will be like:

REPLACED_STRING 
SECOND AAA

Upvotes: 1

Paul
Paul

Reputation: 141877

The optional fourth parameter of preg_replace is limit:

preg_replace($search, $replace, $subject, 1);

Upvotes: 133

codaddict
codaddict

Reputation: 455302

You can use the limit argument of preg_replace for this and set it to 1 so that at most one replacement happens:

$new = preg_replace('/aaa/','replacement',$input,1);

Upvotes: 15

Related Questions