Как я могу извлечь имя пользователя из строки, используя регулярное выражение в PHP - PullRequest
0 голосов
/ 07 ноября 2010

Как мне извлечь имя пользователя из строки, используя regexp in 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.

?>

Ответы [ 2 ]

5 голосов
/ 07 ноября 2010
if(preg_match('/^user=(.+?),pass=(.+?)$/', $myString, $matches)){// if there's no match, this won't be executed
   $username = $matches[1];
   $password = $matches[2];
}

Если вы знаете, какие символы разрешены, рекомендуется использовать вместо них классы символов или ..Например, вы знаете, что пароль содержит только символы az (только строчные буквы) и 0-9, вам следует заменить второй (. +?) На [a-z0-9]+?.Если вы даже знаете, что это фиксированная длина, в случае хэша MD5 вы должны заменить +? на {32} (md5 имеет фиксированную длину 32)

4 голосов
/ 07 ноября 2010

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);
...