PHP: sscanf extract values from string within double quotes
我正在尝试解析会话字符串中双引号中包含的2个值。其他字符串变量不是常量,因此不能使用任何其他字符作为标记。我只需要引用的值。我的以下sscanf函数不完整。
1 2 3 4 5 6 | $string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}'; sscanf($string,'%[^"]', $login_ip, $login_date); echo $login_ip; echo $login_date; |
感谢您的帮助。
这些数据只是来自
的PHP序列化文本
在这种情况下,您可以通过以下方式获得所需的数据:
1 2 | $sessionData = unserialize('a:1:{s:14:"174.29.144.241";s:8:"20110508";}'); list($ip, $date) = each($sessionData); |
一个有趣的技巧是使用explode并使用"作为分隔符,如下所示:
双引号中的任何值都将以奇数索引返回,即$ res [1],$ res [3]
您可以使用正则表达式来实现。
1 2 3 4 | $string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}'; $pattern = '/"(?P<ip>[^"]*)"[^"]*"(?P<date>[^"]*)"/'; preg_match( $pattern, $string, $matches ); echo $matches['ip'].' '.$matches['date']; |
第一个引用的值将为ip,第二个为日期。
1 2 3 4 5 | $string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}'; preg_matches("/(\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b)/",$string,$matches); echo $matches[1]; |
这应该返回您的IP地址。咨询php.net