我试图sscanf
读取一堆连续的固定长度字符串,但它不能很好地工作。我可以打印一个固定长度的字符串:
sprintf('%.5s', 'aaaaabbbbb');
但是如果我尝试使用%.5s
来读取固定长度的字符串(例如输入字符串的前5个字节),那么它就不起作用了。例如
var_dump(sscanf('aaaaabbbbb', '%.5s'));
如果我这样做var_dump
返回NULL
,我会收到以下警告:
Warning: sscanf(): Bad scan conversion character "."
除了%5s
之外,我还尝试了%.5s
,但这也不能按预期工作。例如
var_dump(sscanf('aa aabbbbb', '%5s'));
返回:
array(1) {
[0]=>
string(2) "aa"
}
我希望它返回的是:
array(1) {
[0]=>
string(5) "aa aa"
}
有什么想法吗?
答案 0 :(得分:1)
问题是任何空格字符都被视为使用%s
的新输入。
根据http://php.net/manual/en/function.sscanf.php
评论,这应该有效:
$result = sscanf(" Vendor: My Vendo Model: Super Model Foo Rev: 1234",
' Vendor: %8[ -~] Model: %16[ -~] Rev: %4c',
$vendor, $model, $rev);
所以,在你的情况下:
var_dump(sscanf('aa aabbbbb', '%5[ -~]'));
在PHP 5.2.10上运行正常。