关于scanf:PHP:sscanf从双引号内的字符串中提取值

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;

感谢您的帮助。


这些数据只是来自serialize()

的PHP序列化文本

在这种情况下,您可以通过以下方式获得所需的数据:

1
2
$sessionData = unserialize('a:1:{s:14:"174.29.144.241";s:8:"20110508";}');
list($ip, $date) = each($sessionData);

一个有趣的技巧是使用explode并使用"作为分隔符,如下所示:

1
2
3
4
<?php
$res = explode('"','a:1:{s:14:"174.29.144.241";s:8:"20110508";}');
print_r($res);
?>

双引号中的任何值都将以奇数索引返回,即$ 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