如何替换文件中的内容

时间:2012-04-24 07:19:26

标签: php str-replace

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

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

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

有什么建议吗?

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

3 个答案:

答案 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]匹配,然后换一行(或表达式)换一个新的!