Replace only first match using preg_replace

PhpRegexPreg Replace

Php Problem Overview


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?

Php Solutions


Solution 1 - Php

The optional fourth parameter of preg_replace is limit:

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

Solution 2 - Php

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

Solution 3 - Php

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondeadbeefView Question on Stackoverflow
Solution 1 - PhpPaulView Answer on Stackoverflow
Solution 2 - PhpcodaddictView Answer on Stackoverflow
Solution 3 - PhpT.ToduaView Answer on Stackoverflow