Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的字符串替换未按预期工作_Php - Fatal编程技术网

php中的字符串替换未按预期工作

php中的字符串替换未按预期工作,php,Php,我有一个字符串,如下所示: $var = "Hello Hi World it is an awesome day. Test Hi guys Whats up"; function get_string_between($string, $start, $end){ $string = " ".$string; $ini = strpos($string,$start); if ($ini == 0) return ""; $i

我有一个字符串,如下所示:

$var = "Hello Hi World it is an awesome day. Test Hi guys Whats up";
function get_string_between($string, $start, $end){
        $string = " ".$string;
        $ini = strpos($string,$start);
        if ($ini == 0) return "";
        $ini += strlen($start);
        $len = strpos($string,$end,$ini) - $ini;
        return substr($string,$ini,$len);
        } 

$parsed0 = get_string_between($var, "Hello", "World");

So I get the String in `$parse0` 
$varnew = str_replace($parsed0,"NEWVALUE", $var);

echo $varnew;
Hello NEWVALUE World it is an awesome day. Test NEWVALUE guys Whats up
我正在尝试替换字符串中的值,如下所示:

$var = "Hello Hi World it is an awesome day. Test Hi guys Whats up";
function get_string_between($string, $start, $end){
        $string = " ".$string;
        $ini = strpos($string,$start);
        if ($ini == 0) return "";
        $ini += strlen($start);
        $len = strpos($string,$end,$ini) - $ini;
        return substr($string,$ini,$len);
        } 

$parsed0 = get_string_between($var, "Hello", "World");

So I get the String in `$parse0` 
$varnew = str_replace($parsed0,"NEWVALUE", $var);

echo $varnew;
Hello NEWVALUE World it is an awesome day. Test NEWVALUE guys Whats up
我将替换如下:

$var = "Hello Hi World it is an awesome day. Test Hi guys Whats up";
function get_string_between($string, $start, $end){
        $string = " ".$string;
        $ini = strpos($string,$start);
        if ($ini == 0) return "";
        $ini += strlen($start);
        $len = strpos($string,$end,$ini) - $ini;
        return substr($string,$ini,$len);
        } 

$parsed0 = get_string_between($var, "Hello", "World");

So I get the String in `$parse0` 
$varnew = str_replace($parsed0,"NEWVALUE", $var);

echo $varnew;
Hello NEWVALUE World it is an awesome day. Test NEWVALUE guys Whats up
我得到如下输出:

$var = "Hello Hi World it is an awesome day. Test Hi guys Whats up";
function get_string_between($string, $start, $end){
        $string = " ".$string;
        $ini = strpos($string,$start);
        if ($ini == 0) return "";
        $ini += strlen($start);
        $len = strpos($string,$end,$ini) - $ini;
        return substr($string,$ini,$len);
        } 

$parsed0 = get_string_between($var, "Hello", "World");

So I get the String in `$parse0` 
$varnew = str_replace($parsed0,"NEWVALUE", $var);

echo $varnew;
Hello NEWVALUE World it is an awesome day. Test NEWVALUE guys Whats up
我的预期结果是:

Hello NEWVALUE World it is an awesome day. Test Hi guys Whats up.
发生这种情况是因为在
$parse0
中,我得到的结果是
Hi
,它在该字符串中包含两次

有没有办法用一个函数获取起始和结束位置,然后用这些函数替换它?

我建议。检查下面的代码

function customReplace($string, $start, $end, $value = "NEWVALUE"){
    return preg_replace_callback('/'.$start.'(.*?)'.$end.'/', function($m) use($start, $end){
        return "$start NEWVALUE $end";
    }, $string);
}

$var = "Hello Hi World it is an awesome day. Test Hi guys Whats up";

echo customReplace($var, "Hello", "World");
输出:

Hello NEWVALUE World it is an awesome day. Test Hi guys Whats up
代码的问题是:

$varnew = str_replace($parsed0,"NEWVALUE", $var);
$parsed0
具有
Hi
(从函数中获取),并说
str\u replace
以将
Hi
替换为字符串
$var
(整个字符串)中的
NEWVALUE
。因此,
str_replace
按预期工作。希望现在一切都清楚了

更新

同时检查下面的@b263答案。您也可以使用,它不需要回调

你好,NEWVALUE World这是一个很棒的日子。嗨,伙计们,有什么事吗

你不能用str_replace做那件事

$var = "Hello Hi World it is an awesome day. Test Hi guys Whats up";
//$parsed0 = 'Hi';
$varnew = str_replace($parsed0,"NEWVALUE", $var);
因为$parsed0='Hi',该字符串中出现的任何'Hi'都将被替换。如果只想替换第一个引用,可以执行以下操作

$varnew = preg_replace('/'.$parsed0.'/', ' NEWVALUE ', $var, 1);

@我需要的Justcode可能有非常大的字符串,可能包含更多的重复。我知道第一个和最后一个字符串,需要把它们放在中间。请引导我@Justcode它正在替换第一个或第二个引用,依此类推。在我的例子中,我需要替换两个字符串之间的值。希望你现在就得到它!!这有帮助吗?这个先前回答的链接可能会有帮助-