str_replace除了两个标记之间的/ else

I have a statement replacement to do in php (using str_replace or something else). I have this sentence:

"the sun is yellow when the <wrong>red sun is not yellow</wrong>"

I want this:

"the apple is yellow when the <wrong>red sun is not yellow</wrong>"

So I need to replace a word, except between two specific tags (<wrongand </wrong>). How to do that with str_replace or using a regex?

A little bit harder, isn't it? I've searched for many hours already... No clue... Any idea?

Thanks for solution or clue or help

the difference is sun -> apple in the second word. for that example str_replace('sun', 'apple', $text, 1) will do just the first one

If the string is small, why not use explode() to explode it at the tags, and replace the strings in required fragments, and then rejoin it ? Or try DomDocument :

<?php

$str = "the sun is yellow when the <wrong> This is also red sun not yellow red sun is not yellow some words </wrong> and here is 
yellow sun outside <wrong> , now yellow sun inside </wrong>";

$origArr = array("sun");
$replaceArr = array("apple");
$str = str_replace($origArr,$replaceArr,$str);

$domElem = new DOMDocument();
$domElem->loadXML("<temp_tag>".$str."</temp_tag>");

$nodes = $domElem->getElementsByTagName('wrong');


$index = 0;
while($nodes->item($index)->nodeValue)
  {
    $nodes->item($index)->nodeValue = str_replace($replaceArr,$origArr,$nodes->item($index)->nodeValue);
    $index++;
  }

echo $domElem->saveHTML();

/* remove the <temp_tags> ....*/

?>

See it here: http://codepad.org/T5o3shB4