我有一个配置文件,其结构如下所示:#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);
子衿沉夜
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];
}
}
- 2 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消