2016-01-13 66 views
1

嗨,我用不同的值替换某些名称。这里是我更换"@size-name""@size"。但问题是价值观我的代码只更换尺寸第一,注意名称,例如PHP匹配并替换整个字

@size = "replaceword" 
@size-name = "replaceword2" 

但其更换

@size ="replaceword" 
@size-name = "replaceword2-name" 

我怎么能代替整字不属于它在这里是我的代码

$tempOutQuery = preg_replace("/(\b($key)\b)/i" , $value , $tempOutQuery); 
    $tempOutQuery= str_replace("@".$key ,$value ,$tempOutQuery); 

两个代码不工作

我的全部代码

$val= "Hi I want @size dress which is @size-name"; 

$tempOutQuery = preg_replace("/(\b(size)\b)/i" ,"replaceword", $tempOutQuery); 
$tempOutQuery = preg_replace("/(\b(size-name)\b)/i" ,"replaceword2", $tempOutQuery); 
+0

把你完整的代码 –

+0

我加小码来解释你,我想请检查什么谢谢 – Allex

+0

我纠正一些输入错误,但我需要知道你需要得到什么(这意味着,最终文本应该是什么)。 –

回答

1

如果你能不使用regulat表达式替换,那么我会建议使用非标准str_replace()使用数组:

$val= "Hi i want @size dress which is @size-name"; 

$search = array('size-name', 'size'); 
$replace = array('replaceword2', 'replaceword'); 

$result = str_replace($search, $replace, $val); 

搜索的顺序和替换字符串是重要! 你应该小心,你先替换长搜索字符串,稍后再替换短字符串。

0

这是另一个选项,使用preg_replace_callback。它实际上与Gennadiy的方法非常相似。唯一真正的区别是,它使用PHP的preg方面(并且它有更多的工作)。但这是另一种玷污谚语猫的方式。

<?php 

// SET OUR DEFAULT STRING 
$string = 'Hi I want @size suit which is @size-name'; 

// LOOK FOR EITHER size-name OR size AND IF YOU FIND IT ... 
// RUN THE FUNCTION 'replace_sizes' 
$string = preg_replace_callback('[email protected](size-name|size)~', 'replace_sizes', $string); 

// PRINT OUT OUR MODIFIED STRING 
print $string; 




// THIS IS THE FUNCTION THAT WILL BE RUN EVERY TIME A MATCH IS FOUND 
// EITHER 'size' OR 'size-name' WILL BE STORED IN $m[1] 
function replace_sizes($m) { 

    // SET UP AN ARRAY THAT HAS OUR POTENTIAL MATCHES AS KEYS 
    // AND THE TEXT WE WANT TO REPLACE WITH AS THE VALUE 
    $size_text_array = array('size-name' => 'replaceword2', 'size' => 'replaceword'); 

    // RETURN WHATEVER THE VALUE IS BASED ON THE KEY 
    return $size_text_array[$m[1]]; 

} 

这将打印出:

Hi I want replaceword suit which is replaceword2 

这里是一个工作演示:

http://ideone.com/njNTbB

0

您可以尝试pre_replace()从数组中的项目替换整个单词在PHP中显示如下。

<?PHP 
     function removePrepositions($text){ 

      $propositions=array('/\bfor\b/i','/\band\b/i'); 

      if(count($propositions) > 0) { 
       foreach($propositions as $exceptionPhrase) { 
        $text = preg_replace($exceptionPhrase, '', trim($text)); 

       } 
      $retval = trim($text); 

      } 
     return $retval; 
    } 



?> 

看到整个post here

+0

你回答什么问题?这与OP的无关。 – Toto