在一些预定义字符串后添加字符

时间:2014-02-27 03:49:05

标签: php preg-replace

我有一个文件,例如:hello.txt,其中包含以下内容

您好 尼斯

插入文本标记

我想在#### INSERT TEXT MARKER ####之后创建一个输入“Hello World”的脚本。

我使用下面的代码来做。

<?php
function insert_into_file($file_path, $insert_marker, $text, $after = true) {
    $contents = file_get_contents($file_path);
    $new_contents = preg_replace($insert_marker, ($after) ? '$0' . $text : $text . '$0', $contents);
    return file_put_contents($file_path, $new_contents);
}

$file_path = "hello.txt";
$insert_marker = "####INSERT TEXT MARKER####";
$text = "Hello World";

$num_bytes = insert_into_file($file_path,$insert_marker,$text,true);

if ($num_bytes === false) {
    echo "Could not insert into file $file_path.";
} else {
    echo "Insert successful!";
}
?>

但我的文件是空的。 请帮忙!

2 个答案:

答案 0 :(得分:1)

您需要分隔符。

$new_contents = preg_replace('/'.$insert_marker.'/',  ($after) ? '$0' . $text : $text . '$0', $contents);

最好使用preg_quote()

$new_contents = preg_replace('/'.preg_quote($insert_marker, '/').'/',  ($after) ? '$0' . $text : $text . '$0', $contents);

答案 1 :(得分:0)

除了你的正则表达式缺少分隔符之外,你实际上并不需要它;以下代码将执行相同的操作:

file_put_contents($file_path, str_replace(
    $insert_marker, 
    $after ? $insert_marker . $text : $text . $insert_marker, 
    $contents
));