2011-05-08 227 views
1

我試圖從會話字符串中解析雙引號內包含的2個值。其他字符串變量不是常量,因此不能將任何其他字符用作標記。我只需要引用的值。我的下一個sscanf函數不完整。PHP:sscanf從雙引號內的字符串中提取值

$string = 'a:1:{s:14:"174.29.144.241";s:8:"20110508";}'; 

sscanf($string,'%[^"]', $login_ip, $login_date); 

echo $login_ip; 
echo $login_date; 

感謝您的幫助。

+1

爲什麼不使用regx它更靈活 – Ibu 2011-05-08 06:35:11

回答

0
$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

+0

您可以擴展正則表達式以使其與您的日期相匹配。 – Ibu 2011-05-08 06:41:00

0

你可以使用正則表達式來做到這一點。

$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,是第二次到日期。

0

一個有趣的黑客將是使用爆炸使用「作爲分隔符是這樣的:

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

在雙引號的任何值將在奇數索引返回即$ RES [1],$ RES [3 ]

2

數據從serialize()

只是PHP序列化的文本在這種情況下,你可以在你需要的數據得到:

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