Preg_replace使用变量输入


preg_replace with variable input

我对此很陌生,并从我发现的另一篇文章中借用了一些代码,我不知道我想做的是正确的还是最好的方式,这只是我如何"获得"它的工作…

代码

<?php
$yn = $_POST['YN'];
echo $yn;
$fl='config.php'; 
        /*read operation ->*/ $tmp = fopen($fl, "r");   $content=fread($tmp,filesize($fl)); fclose($tmp);
// here goes your update
$content = preg_replace('/'$yourname = '"(.*?)'";/', '$yourname = ""$YN"";', $content);

        /*write operation ->*/ $tmp =fopen($fl, "w");    fwrite($tmp, $content);    fclose($tmp);
?>

我试图更新与POST结果匹配$yourname的配置文件条目,我可以回显$yn,它包含正确的值,但我不能让变量在正则表达式替换中工作,

$content = preg_replace('/'$yourname = '"(.*?)'";/', '$yourname = ""$yn"";', $content);

所以如果$yn = Karl,那么我试图将文件中的$yourname = "更新为$yourname = " Karl "

但我不能让它工作,我得到的最接近的是它更新文件与变量作为文本,即$yourname = "$yn"。

希望有人能帮忙

使用您发布的内容,我设法使其工作,非常感谢:)

$content =   preg_replace( '/'$yourname = '"(.*?)'";/', '$yourname = "'.$yn.'";', $content);

我建议使用这样的模式

     preg_replace( '/'.preg_quote( $yourname ).''s*='s*'"[^'"]+'";/', $yourname.'="'.$yn.'";', $content);

. . ' s * = '年代 *'"([^'"]+)'";

  • preg_quote($yourname) -转义变量输入(文字匹配)
  • 's* -一个或多个空格
  • = - literal (=)
  • 's* -一个或多个空格
  • '" - literal (")
  • [^'"]+ -尽可能多地匹配任何非(")贪婪匹配的字符。
  • '" - literal (")
  • ;文字(,)

在这种情况下(因为它使用双引号),(谨慎的?)最好使用连接并避免转义的麻烦。当简单取胜时,不需要做fancy

也要小心这样的错误,$yn$YN在php变量名是区分大小写的,没有这些知识,它可以是一个主要的挑战,找到错误,因为对我们人类来说,它看起来是一样的。当然,文件名、类名、函数和方法不区分大小写(在Windows上)也无济于事。真的不确定在linux上类和方法名是否区分大小写,我尽量避免这个问题,并始终使用相同的大小写。

看到它看起来像OP可能想要$yourname(字面上)我更新了regx

 preg_replace( '/'$yourname's*='s*'"[^'"]+'";/', '$yourname="'.$yn.'";', $content);
https://regex101.com/r/yM9cX9/1