import java.util.regex.Pattern; import java.util.regex.Matcher;
public class Test { public static void main(String[] args) { if(args.length != 1) { System.out.println("请输入一个参数!"); System.exit(0); } Pattern p = Pattern.compile("\\w+@(\\w+.)+[a-z]{2,3}"); Matcher m = p.matcher(args[0]); boolean b = m.matches(); if(b) { System.out.println("有效邮件地址"); } else { System.out.println("无效邮件地址"); } } } 执行:javac Test.java java Test [email protected] 输出:有效邮件地址
执行:java Test abc@def 输出:无效邮件地址
注解: "\\w+@(\\w+.)+[a-z]{2,3}"
在正则表达式中\w表示任意单个字符范围是a-z,A-Z,0-9,因为在java中\本来就是转义符 号,如果只写为\w则会发生歧义,甚至错误,因此要写为:\\w +的意思就是出现一次以上,所以\\w+就代表任意长度的字符串,但不包括其他特殊字符 ,如_,-,$,&,*等,呵呵,如果真想进行完全的邮件有效性检查,那正则表达式就不止这 么长了,呵呵,有兴趣的可以自己写写看
后面的我想就简单了,@必须出现,而且只准出现一次,因此直接写成@就行了
\\w+.任意字符串后面加上DOT,大家都知道这是域名的特点,另外就是我写成了 (\\w+.)+,为什么呢,因为邮件服务器有可能是二级域名,三级域名,或者…… 如果不带()+的话,[email protected]有效,而[email protected]就是无效的了,因此这个 是必须的。
最后是[a-z]{2,3},考虑到一般的域名最后不会出现数字,大写也很少见(我想一般应 该忽略大小写的),并且最少不少于两位,如cn,us,等,最多不超过三位,如com,org, 等,所以就写成了如上形式
刚开始学习正则表达式,呵呵,很多想法也比较幼稚,稍微复杂一点的就搞不好了,还 望各位牛人多多指点:-)

|