Java正则表达式入门


按照套路来,先上一段概念
正则表达式:正则表达式是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。(英语:Regular Expression,在代码中常简写为regex)

先来个小例子
写一个检查QQ号是否是合法的正则,当然我们需要先确定QQ号的规则
1.开头不能是 0
2.全是数字
3.位数为 5 - 8 位
说来就来,上代码

[1-9][0-9]{4,9}

虽然很简单,但是我还是要强行解释一下:
1. [1-9] 代表的是第一位是需要符合数字 1 - 9 其中的一个
2. [0-9] 代表的是第二位是需要符合数字 0 - 9 其中的一个
3. {4,9} 代表的是这样的第二位可以出现 4 - 9 次
4.在正则表达式中,中括号就表示一位,当然也可以不写中括号,直接写规则


接下来就先介绍一下正则表达式的匹配规则,然后列举一些例子去实现,偷个懒。。。注释写的很详细

public class Regex {

    /*
     * 实现正则规则和字符串进行匹配,需要用到的String类方法
     * 
     * boolean matches(String 正则的规则)
     * "demo".matches("[a]") 匹配成功返回 true
     *  
     * String [] split(String 正则的规则)
     * "abc".split("a") 使用规则将字符串进行切割
     * 
     * String replaceAll(String 正则的规则)
     * "abc123".relaceAll("[\\d]","#")  按照正则的规则替换字符串
     * 把数字全部替换成 #
     * 
     * \d :对 d 进行转义,使 d 失去原有的意义
     * \\d : 把 \ 进行转义,所以规则数字要写成 \\d 
     * \\D : 取反,匹配不是数字
     * 
     */

    public static void main(String[] args) {

        checkQQ("1234567");

        checkTel("18842606495");

        //按照 - 对字符串进行切割
        mySplit("-","01-02-03-04-05-06-07");

        //按照空格对字符串进行切割 + 代表空格出现一次或者多次都进行匹配,都切掉
        mySplit(" +" ,"12 13 14     15        16");

        //对 IP 地址进行切割 如果只写一个 . 代表任意字符,必须进行转义,正则里 \\ 算一个
        mySplit("\\.+","192.168.0.100");

        //对 W123Y456 里面的数字进行替换成 *
        myReplaceAll("[\\d]", "W123y456","*");
        //使 * 只出现一次
        myReplaceAll("[\\d]+", "W123y456","*");

        checkMail("ningwy1314@163.com");
    }

    /**
     * 检查是否是QQ号
     * @param qq
     */
    public static void checkQQ(String qq) {

        boolean b = qq.matches("[1-9][\\d]{4,9}");

        System.out.println("检测是否是QQ号: " + b);

    }

    /**
     * 检查是否是手机号
     * 规则:第一位是 1; 第二位是 34578 一共有是十一位
     * @param tel
     */
    public static void checkTel(String tel) {

        boolean b = tel.matches("1[34578][\\d]{9}");

        System.out.println("检测是否是电话号:  " + b);
    }

    /**
     * 对字符串按着正则规则进行切割
     * @param regex 正则规则
     * @param string 需要切割的字符串
     */
    public static void mySplit(String regex,String string) {

        String strArray [] = string.split(regex);

        for (String str : strArray) {

            System.out.print(str + "  ");
        }

        System.out.println();
    }

    /**
     * 对字符串按照正则规则进行替换
     * @param regex 正则规则
     * @param string 要进行处理的字符串
     * @param replace 替换的内容(替换成这个字符串)
     */
    public static void myReplaceAll(String regex,String string,String replace) {

        String str = string.replaceAll(regex, replace);

        System.out.println(str);
    }
    /**
     * 检查是邮箱格式是否正确
     * @param regex
     * @param mail
     * 
     * 123@qq.com
     * 345@163.c,o
     * wttttt@yahoo.com.cn
     * 
     * 邮箱规则:
     * @前 : 内容 [数字字母下划线] 个数不能少于一个
     * @后 : 内容 [数字字母]      个数不能少于一个
     * .后 :  内容 [字母]            个数不能少于一个(这个格式不能少于一个,如:.com.cn 所以规则为:(\\.[a-z]+)+
     */
    public static void checkMail(String mail) {

        boolean b = mail.matches("[a-zA-Z0-9_]+@[a-z0-9]+(\\.[a-z]+)+");

        System.out.println("邮箱格式是否正确:  " + b );

    }


}

这是一些常用的正则规则,在 API Pattern 类中有详细介绍:
字符:x
含义:代表的是字符x
例如:匹配规则为 “a”,那么需要匹配的字符串内容就是 ”a”

字符:\
含义:代表的是反斜线字符’\’
例如:匹配规则为”\” ,那么需要匹配的字符串内容就是 ”\”

字符:\t
含义:制表符
例如:匹配规则为”\t” ,那么对应的效果就是产生一个制表符的空间

字符:\n
含义:换行符
例如:匹配规则为”\n”,那么对应的效果就是换行,光标在原有位置的下一行

字符:\r
含义:回车符
例如:匹配规则为”\r” ,那么对应的效果就是回车后的效果,光标来到下一行行首

字符类:[abc]
含义:代表的是字符a、b 或 c
例如:匹配规则为”[abc]” ,那么需要匹配的内容就是字符a,或者字符b,或字符c的一个

字符类:[^abc]
含义:代表的是除了 a、b 或 c以外的任何字符
例如:匹配规则为”[^abc]”,那么需要匹配的内容就是不是字符a,或者不是字符b,或不是字符c的任意一个字符

字符类:[a-zA-Z]
含义:代表的是a 到 z 或 A 到 Z,两头的字母包括在内
例如:匹配规则为”[a-zA-Z]”,那么需要匹配的是一个大写或者小写字母

字符类:[0-9]
含义:代表的是 0到9数字,两头的数字包括在内
例如:匹配规则为”[0-9]”,那么需要匹配的是一个数字

字符类:[a-zA-Z_0-9]
含义:代表的字母或者数字或者下划线(即单词字符)
例如:匹配规则为” [a-zA-Z_0-9] “,那么需要匹配的是一个字母或者是一个数字或一个下滑线

预定义字符类:.
含义:代表的是任何字符
例如:匹配规则为” . “,那么需要匹配的是一个任意字符。如果,就想使用 . 的话,使用匹配规则”\.”来实现

预定义字符类:\d
含义:代表的是 0到9数字,两头的数字包括在内,相当于[0-9]
例如:匹配规则为”\d “,那么需要匹配的是一个数字

预定义字符类:\w
含义:代表的字母或者数字或者下划线(即单词字符),相当于[a-zA-Z_0-9]
例如:匹配规则为”\w “,,那么需要匹配的是一个字母或者是一个数字或一个下滑线

边界匹配器:^
含义:代表的是行的开头
例如:匹配规则为^[abc][0-9]$ ,那么需要匹配的内容从[abc]这个位置开始, 相当于左双引号

边界匹配器: [abc][09] 含 义 : 代 表 的 是 行 的 结 尾 例 如 : 匹 配 规 则 为 [ a b c ] [ 0 − 9 ] ,那么需要匹配的内容以[0-9]这个结束, 相当于右双引号

边界匹配器:\b
含义:代表的是单词边界
例如:匹配规则为”\b[abc]\b” ,那么代表的是字母a或b或c的左右两边需要的是非单词字符([a-zA-Z_0-9])

数量词:X?
含义:代表的是X出现一次或一次也没有
例如:匹配规则为”a?”,那么需要匹配的内容是一个字符a,或者一个a都没有

数量词:X*
含义:代表的是X出现零次或多次
例如:匹配规则为”a*” ,那么需要匹配的内容是多个字符a,或者一个a都没有

数量词:X+
含义:代表的是X出现一次或多次
例如:匹配规则为”a+”,那么需要匹配的内容是多个字符a,或者一个a

数量词:X{n}
含义:代表的是X出现恰好 n 次
例如:匹配规则为”a{5}”,那么需要匹配的内容是5个字符a

数量词:X{n,}
含义:代表的是X出现至少 n 次
例如:匹配规则为”a{5, }”,那么需要匹配的内容是最少有5个字符a

数量词:X{n,m}
含义:代表的是X出现至少 n 次,但是不超过 m 次
例如:匹配规则为”a{5,8}”,那么需要匹配的内容是有5个字符a 到 8个字符a之间

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值