0

我正在写一个配置编辑器。我正在使用 fopen 和 fgets 逐行读取文件。我想从字符串中获取数组键和值。我不熟悉正则表达式,这就是我问的原因。

示例配置文件:

$conf['something'] = 'value';
$conf['other_thing']['another_key'] = 3000;

我无法遍历 $conf 数组,因为它是系统中的 SuperObject,并且包含许多其他数据,甚至是初始化的类...

4

5 回答 5

2

我会这样做:

// get config file as a variable
require_once('config_file.php');

// get keys
$keys = array_keys($conf);

// get config file as a variable
$values = array_values($conf);
于 2012-11-23T14:24:23.130 回答
1

虽然不是直接回答您的问题,但正如您所写的“我正在编写配置编辑器”。那么我假设你也写下这个配置文件。因此,假设您的编辑器在$conf工作时将配置保存在数组中,我会将其转储为 JSON 而不是您的 PHP 代码:

file_put_contents('config.json', json_encode($conf));

然后在需要时读回

$conf = json_decode( file_get_contents('config.json') );
于 2012-11-23T14:24:27.997 回答
0

\$conf\['(.*?)']\s+=\s+'(.*?)';这是你的模式。键在组 1 中,值在组 2 中。

$,[并且]是特殊字符,因此您应该转义它们。\s+表示空白字符 1 次或多次。

于 2012-11-23T14:20:42.243 回答
0

这是您的正则表达式:

\$conf(\[('.*')\])+\s?=\s?(.*);

第一个匹配是你的键,最后一个是你的值

于 2012-11-23T14:23:34.143 回答
0

由于这是 php 数组,您可以直接循环遍历它,并获取所需的键值对,否则您可以使用 php 的函数array_keys从 $conf 数组中获取所有键,使用array_values获取数组值

要不然

如果您想创建配置编辑器,请尝试使用 ini 文件 php 对创建和使用配置文件有很好的支持,请参阅此函数parse_ini_file如果您有太多键值对,这是创建配置文件的标准方法

于 2012-11-23T14:29:45.173 回答