繁体   English   中英

带变量输入的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);
?>

我正在尝试更新一个与$ yourname与POST结果匹配的配置文件条目,我可以回显$ yn并且它包含正确的值,但是我无法使该变量在regex替换中起作用,

$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 * = \\ s * \\“([[^ \\”] +)\\“;

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

在这种情况下(因为它使用双引号),最好使用串联并避免转义的麻烦。 当简单将赢得胜利时,不必fancy

同样要警惕像这样的错误:php变量名中的$yn vs $YN区分大小写,如果不了解这些信息,查找错误可能是一个重大挑战,因为对我们人类而言,它看起来是一样的。 当然,文件名,类名,函数和方法不区分大小写(在Windows上)并没有帮助。 真的不确定类和方法的名称在Linux上是否区分大小写,因此我尝试避免该问题并始终使用相同的大小写。

看起来OP可能想要$yourname (按字面意思),我更新了regx

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

https://regex101.com/r/yM9cX9/1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM