我有一个简单的电子邮件验证正则表达式来创建。
目前我有这个:
#! /usr/bin/env perl
print "mail from: ";
my $mail_from = lc(<STDIN>);
if ($mail_from =~ /(([^@]+)@(.+))/) {
$mail_from = $1;
print $mail_from;
print "250 OK\n";
}
else{
print "550 ERROR \n";
}
但问题是我可以在.com之后输入各种字符 me@gmail.com blabla
如何匹配字符串直到第一个空格?
此致
答案 0 :(得分:3)
也许尝试这样的模式:
/(([^@]+)@(\S+))/
\S
将匹配任何非空格字符。
答案 1 :(得分:1)
正则表达式中的.
匹配任何和所有字符,包括空格。请尝试使用\S
,它匹配任何非空格。
答案 2 :(得分:0)
使用\S
匹配非空格,您可以使用不情愿的(非贪婪的)量词来略微简化上一个术语:
/((.*?)@(\S+))/
答案 3 :(得分:0)
你的正则表达式中肯定不需要三个捕获吗?
你可能也希望在@
之前和之后避免使用尖括号。
我建议至少这个
/([^<>@\s]+\@[^<>@\s]+)/