替换字符串php中的第一个匹配行

时间:2016-06-24 08:09:05

标签: php replace

我想替换文件中第一个出现的行。例如,我想找到' @ 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之后的像素可能不同,这就是为什么我无法找到整行并替换它的原因。

2 个答案:

答案 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_matchpreg_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 作为分隔符,并将内容写回文件。