为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
天涯尽头无女友 2022-01-02 13:52:54
我有一个配置文件,其结构如下所示:#comment1key1 value1#comment2key-key2 value2#comment3key3 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']任何人都可以帮助我使用正则表达式?
查看完整描述

2 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

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


$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);


查看完整回答
反对 回复 2022-01-02
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

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


$lines = explode(PHP_EOL, $string);


foreach ($lines as $l) {

    if(count($parts = explode(' ' , $l, 2)) == 2) {

        $config[$parts[0]] = $parts[1];   

    }

}


查看完整回答
反对 回复 2022-01-02
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信