2010-11-07 2 views
0

Comment puis-je extraire un nom d'utilisateur de chaîne à l'aide regexp dans phpComment puis-je extraire un nom d'utilisateur de chaîne à l'aide en php regexp

<?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

Je suis trop fatigué pour répondre à cela maintenant, mais voici une bonne ressource cela pourrait vous aider http://www.regular-expressions.info/php.html – ubiquibacon

+1

@typoknig ROTFLMAO. ce genre ne prendra même pas la peine de cliquer. Pourquoi prendre la peine d'apprendre ou de travailler dur, s'il y a stackoverflow? –

+0

Quel est exactement votre problème? Construire une regex ou utiliser des fonctions PHP? Vous devriez vraiment apprendre à utiliser regex avec des fonctions PHP. – Lekensteyn

Répondre

4

A. Approche non regex.

// 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. Celui-ci je recommande et c'est probablement la meilleure option.

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

en utilisant regexp pls :) – faressoft

+0

Ok, j'ai ajouté la regex aussi, mais je ne le recommande pas. –

+2

@faressoft HEY! Vous n'êtes pas au restaurant! Renvoyez la réponse et dites "Merci monsieur, j'apprécie votre effort mais puis-je demander s'il vous plaît regexp?" –

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

Si vous savez ce que les personnages sont autorisés, il est recommandé d'utiliser des classes de caractères au lieu ou .. Par exemple, vous savez que le mot de passe ne contient que des caractères a-z (minuscules uniquement) et 0-9, vous devez remplacer le second (. +?) Par [a-z0-9]+?. Si vous savez même que c'est une longueur fixe, dans le cas d'un hachage MD5, vous devez remplacer +? par {32} (md5 a une longueur fixe de 32)

Questions connexes