2016-07-15 60 views
-2

我有遗憾的地方电话号码和电子邮件被连接这样的字符串:正则表达式来单独级联电话号码和电子邮件

$phone_email = "[email protected]";

我希望能最后一位数字和首字母之间的分裂。

$phone = "617.651.3123"; 
$email = "[email protected]"; 

我使用PHP,但希望该战略将是任何语言直白所需的输出。

编辑

我试过很多事情,比如试图通过简单地删除数字抢电子邮件。 $email = preg_replace('#^\d+#', '', $phone_email);导致仅去除617无视.

+1

向我们展示你已经尝试什么,什么没”工作。然后,我们有一些开始。另外,请用英文描述您希望以正则表达式实施的规则。你怎么知道什么是电话号码和什么是电子邮件? –

+0

@anubhava:如果电子邮件地址以数字开头,那么这将被打破。 –

+0

@AndyLester我尝试了很多事情,包括试图通过删除数字来简单地获取电子邮件。 '$ email = preg_replace('#^ \ d +#','',$ phone_email);'这样只会删除'617'而忽略'.'。 –

回答

1

正如其他人指出的那样,在“最后一个数字和第一个字母”之间进行拆分可能不是一个好策略,因为电子邮件地址可以以数字开头。尽管如此,我相信这样做你问大概什么:

$phone_email = "[email protected]"; 

$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: [email protected] 
+0

谢谢,怎么赶上'$ phone_email'缺少电话号码的地方? –

+0

'@'可以有一些捕获吗? –

+1

看我的编辑。在第一次捕获中使用'*'而不是'+'。 – smarx

1

简单的解决方案是:

$phone_email = "[email protected]"; 
$ms = array(); 
preg_match("/(.*\d)([a-z].*)/", $phone_email, $ms); 
print_r($ms); 

当然情况时的电子邮件与一些不被认为是开始。

+0

我不认为这甚至适用于您测试过的输入,对吧? – smarx

+0

对不起!我误读了。 – smarx

+0

我唯一剩下的建议是处理大写字母,尽管我承认原始问题是非常不明确的。 – smarx

1

后分裂数字和点重复次数

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

demo

+1

输出:'Array ( [0] => 617. [1] => [email protected] )' – smarx

+1

我已更新答案 – splash58