2010-11-07 156 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)