我需要从以下字符串中获取数据,并且需要根据其类型
放置它们的值1) 响应:成功消息:邮箱消息计数邮箱:6000 UrgMessages:0 NewMessages:5 OldMessages:12
必填输出:示例OLD = 12 NEW = 5 URGENT = 0
2) 名称:6000 秘密: MD5秘密: 上下文:DLPN_Admin 语言 : AMA标志:未知 转移模式:打开 MaxCallBR:384 kbps CallingPres:允许演示,未屏蔽 通话限制:2147483647 呼叫组:1 皮卡组:1 Callerid:" Arham Ali" < 6000> ACL:没有 Sess-Timers:接受 Sess-Refresh:uas Sess-Expires:1800秒 Sess-Min-SE:90秒 编解码器顺序:(ulaw:20,gsm:20) 自动构图:否
必需输出:CallerId =" Arham Ali"名称=" 6000"
我非常坚持这个愚蠢的事情,请在PHP域帮助我。
答案 0 :(得分:1)
RegEx最好猜测
$string = 'Response: Success Message: Mailbox Message Count Mailbox: 6000 UrgMessages: 0 NewMessages: 5 OldMessages: 12';
preg_match('/Response: Success Message: Mailbox Message Count Mailbox: (\d+) UrgMessages: (\d+) NewMessages: (\d+) OldMessages: (\d+)/',$matches);
print 'OLD=' . $matches[4] . ' NEW=' . $matches[3] . ' URGENT=' . $matches[2];
$string = 'Name : 6000 Secret : MD5Secret : Context : DLPN_Admin Language : AMA flags : Unknown Transfer mode: open MaxCallBR : 384 kbps CallingPres : Presentation Allowed, Not Screened Call limit : 2147483647 Callgroup : 1 Pickupgroup : 1 Callerid : "Arham Ali" <6000> ACL : No Sess-Timers : Accept Sess-Refresh : uas Sess-Expires : 1800 secs Sess-Min-SE : 90 secs Codec Order : (ulaw:20,gsm:20) Auto-Framing: No';
preg_match('/^.*Name\s?:\s?(.*?)\s.*Callerid\s?:\s?"(.*?)".*$/i', $string, $matches);
print 'CallerId="' . $matches[2] . '" Name= "' . $matches[1] . '"';
答案 1 :(得分:1)
如果你需要更多的东西,消息字符串并不总是相同的,你可以这样做
$string = ' Response: Success Message: Mailbox Message Count Mailbox: 6000 UrgMessages: 0 NewMessages: 5 OldMessages: 12';
preg_match('/OldMessages: (\d+)*/', $string, $oldMessages);
preg_match('/NewMessages: (\d+)*/', $string, $newMessages);
preg_match('/UrgMessages: (\d+)*/', $string, $urgent);
preg_match('/Mailbox: (\d+)*/', $string, $currentMailboxCount);
print 'OLD= '.$oldMessages[1].' NEW='.$newMessages[1].' URGENT='.$urgent[1];
这都是使用正则表达式。 preg_match
同样的方法适用于问题的后半部分。
使用正则表达式的好工具是http://gskinner.com/RegExr/
这可以帮助你!