正则表达式 - 停止连接电子邮件中的逗号?

时间:2017-08-01 06:39:12

标签: regex preg-match

如果我有:

  

me@myemail.com,you@youremail.com

我只想要第一个电子邮件地址,我使用:

'/([^\s]+@[^\s]+)/s'

但是如果提供的数据没有这样的空间:

  

我@ myemail.com,你@ youremail.com

我的表达式给出了整个字符串。如何在两个示例中获得第一个电子邮件地址?我的小提琴:https://regex101.com/r/rJ6b9n/1

5 个答案:

答案 0 :(得分:0)

你可以添加逗号,它会找到第一个([^ \ s] + @ [^ \ s] +),

请参阅regex,它会在第1组中找到您的电子邮件

答案 1 :(得分:0)

如果您只需要第一个电子邮件地址,那么它就足以在正则表达式的末尾添加逗号并获得第一个组

([^\s]+@[^\s^]+),

如果您需要所有电子邮件,可以将此正则表达式与" global"标志

[,\s]*([^\s]+@[^\s^]+)[,\s]*

请参阅https://regex101.com/r/rJ6b9n/4

答案 2 :(得分:0)

使用^表示模式以:

开头

^(([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.-_]+))

这只会收到第一封邮件。

如果删除^,它将选择字符串

中的每封邮件

答案 3 :(得分:0)

由于你的正则表达式是一个捕获组,你可以这样做:

([^ \ S] + @ [^ \ S] +)\,

答案 4 :(得分:0)

我看到两种方法来完成这项工作:

$emails = array(
    'me@myemail.com, you@youremail.com',
    'me@myemail.com,you@youremail.com',
);

// first approch, preg_match
// find email followed by a comma
foreach($emails as $email) {
    preg_match('/\S+@\S+?(?=,)/', $email, $matches);
    print_r($matches);
}
echo "=======================================================\n";

// second approch, preg_split
foreach($emails as $email) {
    echo preg_split('/,/', $email)[0],"\n";
}

<强>输出:

Array
(
    [0] => me@myemail.com
)
Array
(
    [0] => me@myemail.com
)
=======================================================
me@myemail.com
me@myemail.com