我开发ADIF解析器并且解析过程到了我使用sscanf()php函数的地方我解析的strind如下:“QSO_DATE:8:D> 20070909”我需要从这里绘制信息如下:“QSO_DATE”,“8”,“20070909”所以我使用代码:
sscanf("QSO_DATE:8:D>20070909", "%s:%d:D>%d")
但返回数组看起来像这样:
Array
(
[0] => QSO_DATE:8:D>20070909
[1] =>
[2] =>
)
有什么问题?也许有更有效的方法来解析这些记录:
<CALL:7>EM200FT<QSO_DATE:8:D>20140324<TIME_ON:4>1657<BAND:3>12M<MODE:5>PSK63<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<APP_EQSL_AG:1>Y<GRIDSQUARE:6>KN45kj<EOR>
<CALL:5>9V1SV<QSO_DATE:8:D>20140328<TIME_ON:4>1019<BAND:3>10M<MODE:4>JT65<RST_SENT:6>VK4CMV<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:54>Thank you and I confirm your SWL report, 73's de Siva.<APP_EQSL_AG:1>Y<GRIDSQUARE:6>OJ11ui<EOR>
<CALL:5>RA6DQ<QSO_DATE:8:D>20140328<TIME_ON:4>1019<BAND:3>10M<MODE:4>JT65<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:3>73!<APP_EQSL_AG:1>Y<GRIDSQUARE:6>KN85nf<EOR>
答案 0 :(得分:2)
%s
表示任何字符,包括冒号,数字,V形符号等,除了空格字符)和sscanf使用贪婪的抓取....使用更精确的替代方案,如%[A-Z_]
或{{1}可能会为%[^:]
%s
使用$result = sscanf("QSO_DATE:8:D>20070909", "%[^:]:%d:D>%d");
var_dump($result);
扫描%[^:]