正则表达式分离连接的电话号码和电子邮件

时间:2016-07-15 19:18:34

标签: php regex

我有字符串,不幸的是电话号码和电子邮件连接起来像这样:

$phone_email = "617.651.3123mya123@some-site.com";

我希望能够在最后一个号码和第一个字母之间分开。

所需的输出

$phone = "617.651.3123";
$email = "mya123@some-site.com";

我正在使用php,但希望这种策略在任何语言中都是直截了当的。

修改

我尝试了很多东西,包括尝试通过删除数字来简单地抓取电子邮件。 $email = preg_replace('#^\d+#', '', $phone_email);这导致仅删除忽略617

.

3 个答案:

答案 0 :(得分:1)

简单的解决方案是:

$phone_email = "617.651.3123mya123@some-site.com";
$ms = array();
preg_match("/(.*\d)([a-z].*)/", $phone_email, $ms);
print_r($ms);

当然,不考虑电子邮件以号码开头的情况。

答案 1 :(得分:1)

正如其他人所指出的那样,在最后一个数字和第一个字母之间分开"可能不是一个好策略,因为电子邮件地址可以从数字开始。也就是说,我相信这大致符合您的要求:

$phone_email = "617.651.3123mya123@some-site.com";

$matches = [];
preg_match("/([^a-zA-Z]*)(.*)/", $phone_email, $matches);

$phone = $matches[1];
$email = $matches[2];

echo "Phone: $phone\n";
echo "Email: $email\n";

// Output:
// Phone: 617.651.3123
// Email: mya123@some-site.com

答案 2 :(得分:1)

在数字和点重复后分割

print_r(preg_split('/(\d+\.?)+\K/', $phone_email,2));

<强> demo