0

我有一个包含一些信息的配置文件,格式如下:

define("FTP_USERNAME","583hdsljf");
define("FTP_PASSWORD","******");
define("FTP_FOLDER1","greatfolder");
define("FTP_FOLDER2","greatfolder");

通常我在替换模板中的值时使用 str_replace(),但是当我这样做时我需要知道要替换什么(例如 [REPLACE_THIS_WITH_FTP_USERNAME])。在这种情况下我不能这样做,因为当我想用新值替换时,上面的所有值都是未知的和不同的。

有什么建议么?

注意:配置文件中的某些值可能相同。

4

3 回答 3

2
$content = preg_replace('/(define\("FTP_USERNAME",")[^"]+("\);)
/', '$1new username$2', $content);

但是,我强烈建议您对配置文件使用标准化格式,例如 JSON。虽然上面的正则表达式确实有效,但一旦有人手动编辑文件并使用例如单引号而不是双引号,它就会中断。它也会被包含转义引号的字符串打破。

于 2012-04-24T07:40:05.867 回答
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;
于 2012-04-24T07:40:00.590 回答
-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] 进行匹配,并将该行(或表达式)换成新的!

于 2012-04-24T07:38:57.743 回答