我正在尝试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"
}
有什么想法吗?
问题是,使用%s
,任何空格字符都被视为新输入。
根据sscanf评论,这应该可以工作:
$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上工作正常。