JAVA正则表达式

  以前对正则表达式进行过应用,但也都是随查随用,但适合别人的不一定适合自己。今天有时间对正则表达式在JAVA中的应用进行下系统的整理。

  tips:正则表达式的学习建议在进行过简单了解后,结合实例进行学习,多看,多用才可以掌握。

What?正则表达式是什么?

  正则表达式是一串表达文本规则的字符串(代码)。可以用来对文本进行搜索、编辑或处理。并且正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

  在JAVA中正则表达式最常用的方式是规则匹配和文本筛选。

  例:

  规则匹配:判断字符串是否为Url格式

  文本筛选:  从"abcd123" 中捕获数字。

How?怎么用?

  正则表达式语法

    网上这样的文章铺天盖地,这里就不再赘述,个人推荐感觉比较全面的网站 www.runoob.com/java/java-regular-expressions.html

  着重记录语法

字符 说明
^ 匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与"\n"或"\r"之后的位置匹配。
$ 匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与"\n"或"\r"之前的位置匹配。
*  零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。
+ 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
零次或一次匹配前面的字符或子表达式。例如,"do(es)?"匹配"do"或"does"中的"do"。? 等效于 {0,1}。
(pattern) 匹配 pattern 并捕获该匹配的子表达式。可以使用 $0…$9 属性从结果"匹配"集合中检索捕获的匹配。若要匹配括号字符 ( ),请使用"\("或者"\)"。
{n,m} mn 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。
[abc] 字符集。匹配包含的任一字符。
[^xyz] 反向字符集。匹配未包含的任何字符。
[a-z] 字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。
\d 数字字符匹配。等效于 [0-9]。
\D 非数字字符匹配。等效于 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v] 等效。

  举例练习

  1、数字

    answer:^[0-9]+$

  2、基本汉字

    answer:^[\u4E00-\u9FA5]+$

 

  3、英文字符

    answer:^[a-zA-Z]+$

 

  4、QQ号:全数字,限制5-13数,不能以0开头

   answer:  [1-9]\d{4,12}

  5、身份证号

    answer:^(\\d{15})|(\\d{18})$

 

  6、E-mail校验

    answer:^[a-zA-Z0-9]+\\w*@[a-zA-Z0-9]+(\\.[a-z]{2,3})+

 

  7、URL

    answer:(^((http|HTTP|https|HTTPS|ftp|FTP)://))?((([0-9]{1,3}\.){3}[0-9]{1,3})|((([0-9a-z_!~*\'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((\/\?)|(\/[0-9a-zA-Z_!~\*\'\(\)\.;\?:@&=\+\$,%#-\/]*)?)))$

 

  

  JAVA中应用

/**
     * 数字校验:不限制数字位数
     */
    @Test
    public void test1(){
        String regex = "^[0-9]+$";
        String content = "00";
        boolean matches = Pattern.matches(regex, content);
        System.out.println(matches);
    }

    /**
     * 基本汉字匹配,不包含生僻字
     * 编码范围      4E00-9FA5
     */
    @Test
    public void test2(){
        String regex = "^[\u4E00-\u9FA5]+$";
        String content = "测试1111测试";
        boolean matches = Pattern.matches(regex, content);
        System.out.println(matches);
    }

    /**
     * 英文字符
     */
    @Test
    public void test3(){
        String regex = "^[a-zA-Z]+$";
        String content = "aAbxs";
        boolean matches = Pattern.matches(regex, content);
        System.out.println(matches);
    }

    /**
     * 身份证号校验 15位/18位
     */
    @Test
    public void test4(){
        String regex = "^(\\d{15})|(\\d{18})$";
        String content = "411411198812046616";
        boolean matches = Pattern.matches(regex, content);
        System.out.println(matches);
    }

    /**
     * E-mail 校验
     * 规则:1、不可以有特殊字符,不包括下划线
     *      2、含有@
     *      3、含有.
     */
    @Test
    public void test5(){
        String regex = "^[a-zA-Z0-9]+\\w*@[a-zA-Z0-9]+(\\.[a-z]{2,3})+";
        String content = "989863767@qq.com";
        boolean matches = Pattern.matches(regex, content);
        System.out.println(matches);
    }


    /**
     * URL 校验
     * 规则: 网路转载
     */
    @Test
    public void test6(){
        String regex = "(^((http|HTTP|https|HTTPS|ftp|FTP)://))?"+ //协议校验
                       "((([0-9]{1,3}\\.){3}[0-9]{1,3})"+ //IP校验
                        "|"+                        //domain校验
                        "((([0-9a-z_!~*\\'()-]+\\.)*"+  //三级域名
                        "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\\."+    //二级域名
                        "[a-z]{2,6})"+          //*域名
                        "(:[0-9]{1,4})?"+       //端口
                        "((\\/\\?)|"+           //文件校验
                        "(\\/[0-9a-zA-Z_!~\\*\\'\\(\\)\\.;\\?:@&=\\+\\$,%#-\\/]*)?)))$";
        String content = "https://www.oschina.net/code/snippet_2276973_44166";
        boolean matches = Pattern.matches(regex, content);
        System.out.println(matches);
    }

 

上一篇:unicode 格式 转汉字


下一篇:使用正则表达式判断邮箱格式是否正确