php中的Replace值未按预期工作
我有一个这样的文件,我正在尝试替换该文件: abc.txtphp中的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));
# 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()
它正在用值替换它所具有的任何空间。我只想在特定字符串之间替换。所以这根本没用!!