我在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做错了什么?
答案 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!!