我想替换文件中第一个出现的行。例如,我想找到' @ base'在文件中,将其替换为' @base:20;'。我找到了这个:how to replace a particular line in a text file using php?,但这取代了找到的所有字符串,我只想要第一个字符串。
有人有个主意吗?
我的文件如下:
@base: 24px;
@border-color: #B2B;
.underline { border-bottom: 1px solid green }
#header {
color: black;
border: 1px solid @border-color + #222222;
.navigation {
font-size: @base / 2;
a {
.underline;
}
}
.logo {
width: 300px;
:hover { text-decoration: none }
}
}
我想替换@base第一次出现的整行。我想用' @base:50px;'替换它。所以输出将是这样的:
@base: 50px;
@border-color: #B2B;
.underline { border-bottom: 1px solid green }
#header {
color: black;
border: 1px solid @border-color + #222222;
.navigation {
font-size: @base / 2;
a {
.underline;
}
}
.logo {
width: 300px;
:hover { text-decoration: none }
}
}
@base之后的像素可能不同,这就是为什么我无法找到整行并替换它的原因。
答案 0 :(得分:0)
你可以尝试这样的事情。
$content = file("yourfilepath");
for($i = 0; $i < count($content); $i++) {
if (strpos($content[$i], "@base") !== false) {
$content[$i] = "@base:20;\n"
break;
}
}
file_put_contents(implode(PHP_EOL, $content));
我希望这会奏效。
答案 1 :(得分:0)
您可以在preg_match
和preg_replace
。
首先将文件读入数组,遍历数组并找到与您需要替换的行匹配的行 然后修改该行并打破循环,以便只更改第一个匹配项 最后,将行写回文件。
<?php
$lines = file('file.css');
// note that $line is used as a reference
// so we can modify the existing array
foreach ($lines as &$line){
$isMatch = preg_match('#base:\s(\d+)px;#',$line);
if ($isMatch){
$line = preg_replace('#\d+#','50',$line);
break;
}
}
file_put_contents('file.css',implode('',$lines));
preg_match
将测试每一行,直到找到模式
我们正在寻找一个字符串 base:[digits] px; 。
如果找到匹配项,我们使用preg_replace
修改该行,将[digits]的模式替换为值 50 和break
循环,这样就不会进行进一步的更改
最后,我们将修改后的数组implode
变为一个字符串,使用 nothing 作为分隔符,并将内容写回文件。