PHP preg_replace - 文本不会被识别

我在使用 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) ? '$0' . $text : $text . '$0', $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!";

}


幕布斯7119047
浏览 188回答 2
2回答

吃鸡游戏

$是正则表达式的特殊字符(它意味着行尾),您必须对其进行转义:\$并且因为您正在使用包含正则表达式的变量并将其作为函数的参数传递,您必须进行三次转义:$insert_marker = "/##-- \\\$Id: _.htaccess 10934 2017-08-31 12:11:28Z serpent_driver \\\$/";

森林海

理解你的问题有点困难,但我发现你的意思是导致问题的$Id部分$insert_marker。您需要使用反斜杠转义 $,如下所示:$insert_marker = "/##-- \$Id: _.htaccess 10934 2017-08-31 12:11:28Z serpent_driver $/";
打开App,查看更多内容
随时随地看视频慕课网APP