Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

php - preg_replace() replace second occurrence

This is what I do now:

if (strpos($routeName,'/nl/') !== false) {
    $routeName = preg_replace('/nl/', $lang , $routeName, 1 );
}

I replace the nl with for ex. de . But now I want to replace the second occurrence. What's the easiest way to do this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

The answer by @Casimir seems rather applicable to most cases. Another alternative is preg_replace_callback with a counter. In case you need a specific n-th occurence to be replaced only.

#-- regex-replace an occurence by count
$s = "…abc…abc…abc…";
$counter = 1;
$s = preg_replace_callback("/abc/", function ($m) use (&$counter) {

     #-- replacement for 2nd occurence of "abc"
     if ($counter++ == 2) {
          return "def";
     }

     #-- else leave current match
     return $m[0];

}, $s);

This utilizes a local $counter, incremented within the callback on each occurence, and there simply checked for a fixed position here.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...