JAVA常用类之——正测表达式

来源:互联网 发布:优生优育重要性知乎 编辑:程序博客网 时间:2024/05/18 03:22
JAVA常用类之——正则表达式

    首先,正测表达式是按一定的规则来处理字符串的,具体就包括判断,获取,分割,替换功能。
    通常,它被用于下面两个目的:
    1. 匹配一串字符串是符符合特定的规则,比如邮箱格式,用户名和密码的格式。
    2. 从字符串中获取我们想要的部分。

    一. 判断功能,采用String类的maches(String regex)方法实现。
    示例1. 简单的字符串匹配模式:
<span style="font-size:14px;">//中国移动136和139开头的电话号码匹配模式String regex = "13[69]\\d{8}";</span>
    其中\\d表示任意数字,后面{ }内的内容表示前面数字出现的频度。
    
    示例2. 校验邮箱格式是否符合要求
    1. 邮箱格式匹配的正则表达式如下:    
String emailRegex = "[a-zA-Z_0-9]@[a-zA-Z_0-9]\\.(com|cn|org|net|gov)";
     上面的正则表达式只能是x@x.com类型的,因为[a-zA-Z_09]只能表示一个数字,可以在后面加个“+”就可以表示多个字符了。    
String emailRegex = "[a-zA-Z_0-9]+@[a-zA-Z_0-9]+\\.(com|cn|org|net|gov)";
    对上面的表达式进行优化,可以如下表示:    
String emailRegex1 = "\\w+@\\w+\\.(com|cn|org|net|gov)";
    从上面可以看出,正则表达式中的特殊字符'+'的作用是:指定前面表达式可以出现多次,否则只能出现一次。
    用户名不可以无限长,所以还可以用{ }来限制用户名长度,比如最少6位,最多12位,@符号后面跟的公司名最少2位,最多6位,这样的规则如下:    
String emailRegex1 = "\\w{6,12}@\\w{2,4}\\.(com|cn|org|net|gov)";
    继续优化,在很多网站注册时发现,用户名只能以字母开头,所以上面的规则改为下:    
String emailRegex1 = "[a-zA-Z]\\w{6,12}@\\w{2,4}\\.(com|cn|org|net|gov)";
    上面限定了第一个字母必须是a-z或A-Z。

    二. 分割,获取,替换功能,采用String类的方法实现
    先思考下面几个问题:
    1. 在QQ聊天过程中,如果你发送银行卡号,客码之类的,QQ都会给出提示什么的,怎么做到? 
    2. 在网站或论坛注册的过程时候,提示你用户名少于X位数,用户名不能以数字开头,这是怎么做到的?
    3. 在发表博客或贴子过程中,如果出现脏话或不文明之类的话,会屏蔽掉,这是怎么做到的?
    请看下面的例子。
    1. 识别银行卡号:    
// 银行卡号的简单匹配规则,提示"请不要在聊天中发送银行卡号信息"// 银行卡号一般比较长,这里认为是10位到20位之间都算是银行卡号String regex1 = "621\\d{10,20}";String s = in.nextLine();if(s.matches(regex1)){System.out.println("请不要在聊天中发送银行卡号等信息");}
    2. 识别不文明用语:    
//"垃圾"这两个汉字的Unicode编码如下//'.'可以匹配任意的字符,*表示前面的子表达式可以出现0次或多次String regex2 = ".*\u5783\u573e.*";String s = in.nextLine();  if(s.matches(regex2)){  System.out.println("请文明上网");     }
    3. 从邮箱中分离出用户名:    
//邮箱格式表达式String regex = "[a-zA-Z]\\w{6,12}@\\w{2,4}\\.(com|cn|org|net|gov)";while(true){    String s = in.nextLine();    String[] ss = s.split("@");            //判断是否符合要求,如果不符合提示出原因    if(!s.matches(regex)){                        //判断用户是否是数字开头            if(Character.isDigit(ss[0].charAt(0))){            System.out.println("用户名不能以数字开头!");            }            //判断用户名长度            if(ss[0].length() < 6 || ss[0].length() > 12){            System.out.println("用户名长度在6-12之间");            }             }else{            System.out.println("邮箱符合要求,用户名为: "+ss[0]);                        }}

    
        

    
0 0