如果我有:
me@myemail.com,you@youremail.com
我只想要第一个电子邮件地址,我使用:
'/([^\s]+@[^\s]+)/s'
但是如果提供的数据没有这样的空间:
我@ myemail.com,你@ youremail.com
我的表达式给出了整个字符串。如何在两个示例中获得第一个电子邮件地址?我的小提琴:https://regex101.com/r/rJ6b9n/1
答案 0 :(得分:0)
你可以添加逗号,它会找到第一个([^ \ s] + @ [^ \ s] +),
请参阅regex,它会在第1组中找到您的电子邮件
答案 1 :(得分:0)
如果您只需要第一个电子邮件地址,那么它就足以在正则表达式的末尾添加逗号并获得第一个组
([^\s]+@[^\s^]+),
如果您需要所有电子邮件,可以将此正则表达式与" global"标志
[,\s]*([^\s]+@[^\s^]+)[,\s]*
答案 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