解析 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 key-value 有 2 个值,它们应该只是数组中的 1 个字符串.


我希望有的输出:


[

   'key1' => 'value1',

   'key-key2' => 'value2',

   'key3' => 'value3 value4'

]

任何人都可以帮助我使用正则表达式?


天涯尽头无女友
浏览 137回答 2
2回答

呼唤远方

它应该足够简单,不必使用正则表达式,因为您可以#很容易地在行的开头进行检查,然后使用explode()空格和 2 个部分的限制来提取密钥和数据...$lines = explode(PHP_EOL, $string);$config = [];foreach ($lines as $l) {&nbsp; &nbsp; if ( !empty($l) && $l[0] != '#' ) {&nbsp; &nbsp; &nbsp; &nbsp; list($key, $value) = explode(" ", $l, 2);&nbsp; &nbsp; &nbsp; &nbsp; $config[$key] = $value;&nbsp; &nbsp; }}print_r($config);

子衿沉夜

使用您现有的代码;只需将空间限制为 2 个元素的每一行分解,并检查您是否获得 2 个元素:$lines = explode(PHP_EOL, $string);foreach ($lines as $l) {&nbsp; &nbsp; if(count($parts = explode(' ' , $l, 2)) == 2) {&nbsp; &nbsp; &nbsp; &nbsp; $config[$parts[0]] = $parts[1];&nbsp; &nbsp;&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP