PHP preg_replace - 文本将无法识别

PHP preg_replace - text will not be recognized

我对 preg_replace 有疑问。 $insert_marker 文本将无法识别,是由“$”引起的。如果我删除 2 个 $ 字符,它就可以工作。那么问题是什么?

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

$file_path = ".htaccess";
$insert_marker = "/##-- $Id: _.htaccess 10934 2017-08-31 12:11:28Z serpent_driver $/";
$text = "\n##added text";

$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!";
}

$ 是正则表达式的特殊字符(表示行尾),您必须转义它:$ 并且因为您使用的是包含正则表达式的变量并将其作为函数的一个参数,必须三重转义:

$insert_marker = "/##-- \$Id: _.htaccess 10934 2017-08-31 12:11:28Z serpent_driver \$/";

有点难以理解您的问题,但我发现您的意思是 $insert_marker$Id 部分导致了问题。您需要使用反斜杠对 $ 进行转义,如下所示:$insert_marker = "/##-- $Id: _.htaccess 10934 2017-08-31 12:11:28Z serpent_driver $/";