在 PHP 中解析配置文件(键值)

  • 本文关键字:键值 配置文件 PHP php
  • 更新时间 :
  • 英文 :


我有一个配置文件,其结构如下所示:

#comment1
key1 value1
#comment2
key-key2 value2
#comment3
key3 value3 value4

我一直在尝试使用以下代码在 PHP 中解析它:

$lines = explode(PHP_EOL, $string);
$config = [];
foreach ($lines as $l) {
preg_match("/^(?P<key>w+)s+(?P<value>.*)/", $l, $matches);
if (isset($matches['key'])) {
$config[$matches['key']] = $matches['value'];
}
}

但是我无法正确使用正则表达式,上面的正则表达式仅适用于带有 #comment1 的行,它不能正确解析 key-key2,并且 #comment3 键值有 2 个值,应该只是数组内的 1 个字符串。

我希望有的输出:

[
'key1' => 'value1',
'key-key2' => 'value2',
'key3' => 'value3 value4'
]

有人能帮我处理正则表达式吗?

它应该足够简单,不必使用正则表达式,因为您可以轻松地在行首检查#,然后使用带有空格和限制为 2 部分的explode()来提取密钥和数据......

$lines = explode(PHP_EOL, $string);
$config = [];
foreach ($lines as $l) {
if ( !empty($l) && $l[0] != '#' ) {
list($key, $value) = explode(" ", $l, 2);
$config[$key] = $value;
}
}
print_r($config);

使用您现有的代码;只需在限制为 2 个元素的空间上分解每一行,并检查您是否得到 2 个元素:

$lines = explode(PHP_EOL, $string);
foreach ($lines as $l) {
if(count($parts = explode(' ' , $l, 2)) == 2) {
$config[$parts[0]] = $parts[1];   
}
}

最新更新