Php fscanf()/sscanf()-是否匹配可变长度空格?

Php fscanf()/sscanf()-是否匹配可变长度空格?,php,parsing,printf,scanf,Php,Parsing,Printf,Scanf,我想使用或(最好)扫描/proc/meminfo并返回MemTotal: MemTotal: 1027156 kB MemFree: 774596 kB Buffers: 23816 kB Cached: 198300 kB 由于MemTotal:和实际数字之间的空格数不同,我想知道sscanf()是否足够聪明,可以解析如下内容: sscanf($line, "MemTotal:\s+%d"); sprintf()的填充

我想使用或(最好)扫描
/proc/meminfo
并返回
MemTotal

MemTotal:        1027156 kB
MemFree:          774596 kB
Buffers:           23816 kB
Cached:           198300 kB
由于
MemTotal:
和实际数字之间的空格数不同,我想知道
sscanf()
是否足够聪明,可以解析如下内容:

sscanf($line, "MemTotal:\s+%d");
sprintf()
的填充和对齐说明符也可以与
sscanf()一起使用吗


我会自己尝试,但我没有可用的dev/Linux环境

你把问题复杂化了。我建议将此方法用于在经得起未来考验的关联数组中转换
/proc/meminfo

$input = file_get_contents('/proc/meminfo');
$data = [];
$hits = preg_match_all('/^(.*):\s+([0-9]+)/m', $input, $matches);
for($i = 0; $i != $hits; $i++)
    $data[$matches[1][$i]] = $matches[2][$i];
var_dump($data);
:


是的,
sscanf
足够聪明,可以用任意数量的空格来解析它。您甚至不需要以任何特殊方式指定它。照办

sscanf($line, '%s%d');
你会得到

Array
(
    [0] => MemTotal:
    [1] => 1027156
)
不幸的是,PHP手册中关于什么可以用作格式字符串的内容还不太完整,但由于它是基于UNIX命令的,因此您可以查看其他文档以了解您有哪些选项:


但是让它们工作起来有点麻烦。

不,
sscanf
不懂正则表达式。是的,
sscanf
sprintf
的格式说明符是相同的。
Array
(
    [0] => MemTotal:
    [1] => 1027156
)