黑马程序员技术交流社区

标题: 正则表达式的实现 [打印本页]

作者: zhangfeng    时间: 2012-6-24 17:39
标题: 正则表达式的实现
本帖最后由 zhangfeng 于 2012-6-25 10:37 编辑

关于正则表达式的知识有点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线,要怎么定义规则呢?下面简单的测试代码,要怎么定义regex呢?

import java.io.*;
class  CheckEmailDemo{
       public static void main(String args[]) {
       CheckEmail();
       }
       public static void CheckEmail()
       {
                       String emailName = null;
                       BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
                       System.out.print("请输入邮箱号:");
                       try{
                       emailName = br.readLine();
               }catch(Exception e){}
                             String regex = "/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/ ";//此处要怎么写呢?
                       boolean flag = emailName.matches(regex);
                       if(flag)
                               System.out.println("邮箱地址"+emailName+"格式是正确的。");
                       else
                               System.out.println("邮箱地址"+emailName+"格式是非法的。");        
       }
}
作者: 张华廷    时间: 2012-6-24 17:45
百度上有啊,百度一下就知道,顺便给你说说;
//验证Mail的正则表达式,^[a-zA-Z0-9_-]:开头必须为字母,下划线,数字,
格式:regex = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/;
作者: 唐辉辉    时间: 2012-6-24 17:53
是在网上找的,像一般邮箱,手机,电话,IP这些常用的都有固定表达式存在,网上百度下就有很多。

java验证邮箱格式:
Pattern pattern = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");
Matcher matcher = pattern.matcher("a@aa.com");
System.out.println(matcher.matches());


作者: 谭立文    时间: 2012-6-24 18:06
控制邮箱的格式的方式有很多,出发点不一样写的regex也不一样,这是我自己写的一个,希望对你有帮助。
import java.util.regex.*;
import java.util.Scanner;
public class Test_2
{
        public static void main(String[] args)
        {
                Pattern p;
                Matcher m;
               
                Scanner read = new Scanner(System.in);
                System.out.print("请输入一串字符:");
                String str = read.nextLine();
               
                String regex = new String("[a-z[A-Z][0-9]]+@[a-z[A-Z][0-9]]+[.]");
                int first = -1;
                first = str.indexOf('.');
                System.out.println(first);
                boolean judge;
                p = Pattern.compile(regex);
                m = p.matcher(str);
                System.out.println("匹配模式:"+regex);
               
                if(m.lookingAt())
                {
                        String end = str.substring(first + 1, str.length() );
                        System.out.println(end);
                        if(end.equals("com") || end.equals("cn"))
                        {
                                judge = true;
                        }
                        else
                        {
                                judge = false;
                        }
                        System.out.println(first);
                }
                else
                {
                        judge = false;
                }
                if(judge)
                {
                        System.out.println("符合邮箱的书写格式!");
                }
                else
                {
                        System.out.println("不符合邮箱的书写格式!");
                }
        }
}

作者: 佟都    时间: 2012-6-24 18:11
本帖最后由 tongdu_simon 于 2012-6-24 18:28 编辑

   String regHead = "[a-zA-Z]\\w{5, 17}";//以字母开头,包括6~18个字符
   String regMid = "@";
   String regEnd1 = "[a-zA-Z0-9]+";//邮件服务器的主机名,如abc@163.com中的163
   String regEnd2 = "(\\.[a-zA-Z]+)+";//邮件服务器的根域名

   String regex = regHead + regMid + regEnd1 + regEnd2;

因为写正则很容易出错,所以较复杂的我都是这么分段处理的。

p.s.参考资料:
1.Java帮助文档中:java.util.regex.Pattern部分有详细说明
2.在毕向东老师视频教程的25天-07-正则表达式(练习2)

11分50秒 处有讲到这个问题。



作者: 常佳杰    时间: 2012-6-24 18:47

关于正则表达式的知识有点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线,要怎么定义规则呢?下面简单的测试代码,要怎么定义regex呢?
我直接说重点了
应该这样定义:
String regex = "[a-zA-Z][a-zA-Z0-9_]{5, 17}";

作者: 周兴中    时间: 2012-6-24 22:03
关于正则表达式的知识有点疑问,如果用正则表达式来检测邮箱的格式,邮箱要以字母开头,包括6~18个字符,包括字母、数字、下划线,要怎么定义规则呢?下面简单的测试代码,要怎么定义regex呢?
按照你的要求,邮箱验证正则表达式如下:
String regex = "^[a-zA-Z]\\w{4,17}@\\w+(\\.\\w+)+$";

\w: 单词字符:[a-zA-Z_0-9]   
^ :行的开头
$ :行的结尾
+ : 表示前面的正则出现一次或多次
(正则) : 表示把括号内的内容作为一个组使用

其他详细请参考API文档.

毕向东老师25天的第7个视频第16分钟开始有讲解邮箱的正则说明.

作者: zhangfeng    时间: 2012-6-25 10:36
讲的很详细,谢了,要加油了哈




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2