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它正在替换第一个或第二个引用,依此类推。在我的例子中,我需要替换两个字符串之间的值。希望你现在就得到它!!这有帮助吗?这个先前回答的链接可能会有帮助-