PHP匹配并替换整个单词

PHP匹配并替换整个单词,php,preg-replace,Php,Preg Replace,嗨,我正在用不同的值替换某些名称。下面是我要替换的值“@size name”和“@size”。但问题是我的代码只替换了大小和名称,例如 @size = "replaceword" @size-name = "replaceword2" 但它正在取代 @size ="replaceword" @size-name = "replaceword2-name" 如何替换整个单词而不是它的一部分这是我的代码 $tempOutQuery = preg_replace("/(\b($key)\b)/i"

嗨,我正在用不同的值替换某些名称。下面是我要替换的值
“@size name”
“@size”
。但问题是我的代码只替换了大小和名称,例如

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

如果可以在不使用regulat表达式的情况下进行替换,那么我建议将standart
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);
搜索和替换字符串的顺序很重要 您应该注意先替换长搜索字符串,然后替换短字符串


这里还有另一个选项,使用
preg\u replace\u 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('~@(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]];

}
下面是一个工作演示:

您可以尝试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;
    }



?>


查看整个

我添加了一些小代码来解释我想要什么请检查谢谢我更正了一些错误输入,但我需要知道你需要得到什么(它的意思是,什么应该是最终文本)。你在回答什么问题?这与OP无关。
<?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;
    }



?>