如何在php中使用正则表达式来提取这样的数据?

时间:2011-12-27 05:05:00

标签: php regex

我在php中使用以下代码来提取用户名,密码和电子邮件:

$subject = "fjcljt # 123456789 # chengyong702@126.com";
$pattern2 = '/^(\w+\ # ){2}?\w+ ?/';
preg_match($pattern2, $subject, $matches);

但是使用print_r返回的结果是Array ( [0] => fjcljt # 123456789 # chengyong702 [1] => 123456789 # )

我在这里使用preg_match做错了什么?

4 个答案:

答案 0 :(得分:1)

list($username, $password, $email) = explode(' # ', $subject);

答案 1 :(得分:1)

尝试使用explode而不是regex。正则表达式使用更多资源。

  

$ data = explode('#','fjcljt#123456789#chengyong702@126.com');

然后您可以访问以下数据:

  

$数据[0]; //用户名
  $数据[1]; //密码
  $数据[2]; //电子邮件

修改 对于空白使用分隔符,如下所示:

  

“#”

答案 2 :(得分:0)

这是两件事。首先,您在匹配组{2}上使用量词(..)。会发生的是,您只获得两个匹配项中的最后一个作为结果组[1]。如果你想分别得到两个数字/单词,你必须扩展正则表达式。

第二个问题是\w+不包含@。所以你只收到一半的电子邮件。

$pattern2 = '/^(\w+) # (\w+) # ([\w@.]+)/';

可能是你想要的。

答案 3 :(得分:0)

不确定你想要做什么的F炸弹,但是如果你试图获得登录凭据,你可以尝试这样的事情

if(preg_match('/^.*\@.*$/i', $type_of_login) > 0)
{
$request = User::get_by_email($type_of_login);
}
else
{
   //get by username or whatevers....
}


//then extract the password!!