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

时间:2011-02-17 11:49:24

标签: php regex preg-replace str-replace replace

我在php中有一个声明替换(使用str_replace或其他东西)。我有这句话:

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

我想要这个:

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

所以我需要替换一个单词,但两个特定标记(<wrong</wrong>之间除外)。如何使用str_replace或使用正则表达式?

有点难,不是吗?我已经搜索了好几个小时......没有头绪......有什么想法吗?

感谢您提供解决方案或线索或帮助

2 个答案:

答案 0 :(得分:1)

如果字符串很小,为什么不使用explode()在标签上爆炸它, 并替换所需片段中的字符串,然后重新加入它? 或者尝试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> ....*/

?>

在此处查看: http://codepad.org/T5o3shB4

答案 1 :(得分:0)

区别在于太阳 - &gt;苹果在第二个字。对于那个例子,str_replace('sun','apple',$ text,1)将只做第一个