2010-11-07 118 views
0

使用正则表达式从字符串中的用户名我怎么能在PHP我怎样才能提取PHP

<?php 

$myString = "user=anas fares,pass=245654323456543dfgf345rgghf5y"; 

//result should be : 

$username = "anas fares"; 
$password = "245654323456543dfgf345rgghf5y"; 

//remember, I dont know if username is anas fares or anything else. 

?> 
+0

我太累了,现在不能回答这个问题,但是这里有一个很好的资源这可能会帮助你http://www.regular-expressions.info/php.html – ubiquibacon 2010-11-07 08:26:16

+1

@typoknig ROTFLMAO。这种类型甚至不会打扰点击。为什么要学习或努力工作,如果有stackoverflow? – 2010-11-07 08:31:47

+0

什么是你的问题?建立一个正则表达式或使用PHP函数?你真的应该学习使用PHP函数的正则表达式。 – Lekensteyn 2010-11-07 08:31:50

回答

4

A.非正则表达式的方法提取使用正则表达式一个用户名。

// deprecated // 
list($username, $password) = explode(',', $myString); 
$username = explode('=', $username); 
$username = str_replace('+', ' ', $username[1]); 
$password = explode('=', $password); 
$password = $password[1]; 

// new version, independent of order // 
$pairs = explode(',', $myString); 
foreach($pairs as $pair){ 
    list($key, $value) = explode('=', $pair); 
    $results[$key] = str_replace('+', ' ', $value); 
} 
// $results['user'] 
// $results['pass'] 

B. Regex。

/^user=([^,]*),pass=(.*)$/ 

C. parse_str。这一个我推荐它可能是最好的选择。

parse_str(str_replace(',', '&', $myString), $results); 
+0

使用正则表达式:) – faressoft 2010-11-07 08:25:25

+0

好吧,我也加了正则表达式,但我不推荐它。 – 2010-11-07 08:26:39

+2

@faressoft嘿!你不在餐厅! upvote的答案,并说:“谢谢先生,我感谢你的努力,但我可以请求正则表达式?” – 2010-11-07 08:27:57

5
if(preg_match('/^user=(.+?),pass=(.+?)$/', $myString, $matches)){// if there's no match, this won't be executed 
    $username = $matches[1]; 
    $password = $matches[2]; 
} 

如果你知道字符允许什么,建议使用字符类来代替或.。例如,您知道密码只包含字符a-z(仅限小写)和0-9,您应该用[a-z0-9]+?替换第二个(。+?)。如果你甚至知道它是一个固定长度,如果是MD5哈希值,你应该用{32}替代+?(md5的固定长度为32)