为了账号安全,请及时绑定邮箱和手机立即绑定

在文件中搜索字符串并替换该行中字符后面的所有内容

在文件中搜索字符串并替换该行中字符后面的所有内容

PHP
慕标琳琳 2023-08-19 10:52:21
我希望使用 PHP 打开一个文件(参见下面的示例),逐行搜索字符串$colour并用.=$value之前的file.txt:red=0green=23blue=999yellow=44如果我的$value是"1"并且我的颜色是"blue",我的文件应该更改为:red=0green=23blue=1yellow=44到目前为止我的代码是:function write($colour, $value) {    $file = 'path';    $file_contents = file_get_contents($file);    $file_contents = str_replace($colour, $value, $file_contents);    file_put_contents($file, $file_contents);}然而,这只需要替换为$colour($value不是“=”之后的所有内容),请参见下面的输出:red=0green=231=999yellow=44我该怎么做呢?
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

问题是您只是将颜色文本替换为中的值

$file_contents = str_replace($colour, $value, $file_contents);

但这并不能取代整行。

使用preg_replace(),您可以替换以颜色开头的内容,然后=将其替换为...

$file_contents = preg_replace("/{$colour}=.*/", "{$colour}={$value}", $file_contents);


查看完整回答
反对 回复 2023-08-19
?
BIG阳

TA贡献1859条经验 获得超6个赞

发生这种情况是因为您的代码仅用指定的值替换颜色。为此,您必须逐行加载文件,按 = 分解以分别获得颜色和值,然后再次调整和存储。或者使用正则表达式。


我想提出不同的方法。而不是对作为字符串加载的文件进行操作,而是将文件作为数组加载。有一个函数可以实现此目的:parse_ini_file。


<?php


// load the file to array with elements key => value

$data = parse_ini_file('conf.txt');


var_dump($data);


// change the data in array however you want - here i add 1 to red everytime this script is called, but it can be whatever: $data['red'] = 2; or similar

$data['red']++;


// now just build the contents of the file again and save it

$contents = '';

foreach ($data as $key => $value) {

  $contents .= $key.'='.$value.PHP_EOL;

}


file_put_contents('conf.txt', $contents);

结果:


// this is how the file looks like at start

cat conf.txt 

red=0

green=23

blue=1

yellow=44


// this is how $data looks

array(4) {

  ["red"]=>

  string(1) "0"

  ["green"]=>

  string(2) "23"

  ["blue"]=>

  string(1) "1"

  ["yellow"]=>

  string(2) "44"

}


// and the file after the execution

cat conf.txt 

red=1

green=23

blue=1

yellow=44

更改$data['red']++;为$data[$color] = $value;将其放入函数中即可。


查看完整回答
反对 回复 2023-08-19
  • 2 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信