我有一个包含一些信息的配置文件,格式如下:
define("FTP_USERNAME","583hdsljf");
define("FTP_PASSWORD","******");
define("FTP_FOLDER1","greatfolder");
define("FTP_FOLDER2","greatfolder");
通常我在替换模板中的值时使用str_replace(),但是当我这样做时我需要知道要替换的内容(例如[REPLACE_THIS_WITH_FTP_USERNAME])。在这种情况下我不能这样做,因为当我想用新值替换时,上面的所有值都是未知的并且不同。
有什么建议吗?
注意:配置文件中的某些值可能相同。
答案 0 :(得分:2)
$content = preg_replace('/(define\("FTP_USERNAME",")[^"]+("\);)
/', '$1new username$2', $content);
但是,我强烈建议您使用标准格式(如JSON)作为配置文件。虽然上面的正则表达式确实有效,但只要有人手动编辑文件并使用例如单引号而不是双引号。它也会破坏包含转义引号的字符串。
答案 1 :(得分:0)
您可以使用preg_replace,如下所示......
$str='
define("FTP_USERNAME","583hdsljf");
define("FTP_PASSWORD","******");
';
$strval='NEW VALUE';
$str=preg_replace('/FTP_USERNAME","(.*)"/','FTP_USERNAME","'.$strval.'"',$str);
echo $str;
答案 2 :(得分:-2)
我会解析文件并将每一行与正则表达式匹配。
例如,
$line = 'define("hello", "hi")';
preg_match('/define\(\s*[\'"](.*)[\'"]\s*,\s*[\'"](.*)[\'"]\s*\)/', $line, $matches);
应该给我们一套
Array
(
[0] => define("hello", "hi")
[1] => hello
[2] => hi
)
然后我们只需将我们的密钥与$ matches [1]匹配,然后换一行(或表达式)换一个新的!