Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.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中的Replace值未按预期工作_Php - Fatal编程技术网

php中的Replace值未按预期工作

php中的Replace值未按预期工作,php,Php,我有一个这样的文件,我正在尝试替换该文件: abc.txt # Define the right-hand side of the equation: #{xvalue1#}xval1= ;#xvalue1 #{xvalue2#}xval2= ;#xvalue2 我所做的如下: $myfile = fopen("abc.txt", "r") or die("Unable to open file!"); $data = fread($myfile,filesize($pgm_file));

我有一个这样的文件,我正在尝试替换该文件:

abc.txt

# Define the right-hand side of the equation:
#{xvalue1#}xval1= ;#xvalue1
#{xvalue2#}xval2= ;#xvalue2
我所做的如下:

$myfile = fopen("abc.txt", "r") or die("Unable to open file!");
$data = fread($myfile,filesize($pgm_file));

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($data, "#{xvalue1#}xval1=", ";#xvalue1");
$parsed1 = get_string_between($data, "#{xvalue2#}xval2=",";#xvalue2");
$datanew0 = str_replace($parsed0,"5", $data);
$datanew1 = str_replace($parsed1,"10", $datanew0);
我试图替换以下值:

$myfile = fopen("abc.txt", "r") or die("Unable to open file!");
$data = fread($myfile,filesize($pgm_file));

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($data, "#{xvalue1#}xval1=", ";#xvalue1");
$parsed1 = get_string_between($data, "#{xvalue2#}xval2=",";#xvalue2");
$datanew0 = str_replace($parsed0,"5", $data);
$datanew1 = str_replace($parsed1,"10", $datanew0);
当我回显
echo$datanew1
我得到的输出是:

# Define the right-hand side of the equation:
    #{xvalue1#}xval1= 5;#xvalue1
    #{xvalue2#}xval2= 5;#xvalue2
我的预期结果是:

# Define the right-hand side of the equation:
    #{xvalue1#}xval1= 5;#xvalue1
    #{xvalue2#}xval2= 10;#xvalue2

为什么不使用正则表达式呢?它是更合适、更高效、更易于维护的实施方式:

<?php
    $subject = "#{xvalue1#}xval1= 19;#xvalue1";
    $pattern = "/#\{xvalue[0-9]+#\}xval[0-9]+= ([0-9]+);#xvalue[0-9]+/";
    preg_match_all($pattern, $subject, $matchs);
    var_dump($matchs);
RegEx模式将是:

$pattern = "/#\{xvalue#\}xval([0-9]+)= ([0-9]+);#xvalue/";

请注意,我还捕获了与您的值关联的键,我建议您使用字符串中的位置,而不是提取和替换内容

看看这个例子

function injectBetween($what, $start, $end, $src){
    $lpos = strpos($src, $start);
    $rpos = strrpos($src, $end);
    return substr($src, 0, $lpos + strlen($start)) . $what . substr($src, $rpos);
}

var_dump(injectBetween('test', 'start', 'end', 'startend'));
将为您提供字符串“starttestend”(长度=12)

或与您的示例相匹配:

var_dump(injectBetween('5', '#{xvalue1#}xval1= ', ';#xvalue1', '#{xvalue1#}xval1= ;#xvalue1'));


我不知道你的全部输入是什么样子。如果有多条线具有相同的图案,则很可能失败。在这种情况下,最好使用正则表达式或逐行解析输入(使用
explode()

等等,你想干什么?如果abc.txt如上所示,
$parsed0
$parsed1
将是
'
@m02ph3u5右好友。在那个地方,我需要宣传我的价值观,如上所述!!但是你为什么要提取空白呢?如果您想在该位置插入,只需在字符串中占据该位置,并使用
substr()
和串联将您的内容放入其中。@m02ph3u5如果您可以将其作为答案,这将非常有用!!我在下面贴了一个例子。如果不符合你的需要,可以随意添加评论。他是在尝试注入东西,而不是提取。更好地使用
preg_replace()
它正在用值替换它所具有的任何空间。我只想在特定字符串之间替换。所以这根本没用!!