正则子模式的使用 Java

目录

一、常用正则表达式

1、整数

2、浮点数

3、字符

4、汉字

5、数字字符组合

二、特殊正则表达式

1、IPV6地址

2、IPV4地址

3、内网IP

4、邮箱地址

5、域名

6、URL

7、手机号码

8、腾讯QQ号

9、电话号码

10、国内电话号码

11、电话号码

12、身份证号

13、中国邮政编码

14、账号校验

15、密码校验

16、强密码校验

17、时间

三、Java正则的简单使用

四、Java正则的复杂使用

1、正常提取内容

2、复杂提取


一、常用正则表达式

1、整数

数字:^[0-9]*$

非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

2、浮点数

浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

3、字符

由26个英文字母组成的字符串:^[A-Za-z]+$

由26个小写英文字母组成的字符串:^[a-z]+$

由26个大写英文字母组成的字符串:^[A-Z]+$

4、汉字

汉字:^[\u4e00-\u9fa5]{0,}$

5、数字字符组合

由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$

二、特殊正则表达式

1、IPV6地址

((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?

2、IPV4地址

* 建议使用第一种(可用 12.12.012.12 进行测试)

a、((25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))\.){3}(25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?\d)))
b、((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})(\.((2(5[0-5]|[0-4]\d))|[0-1]?\d{1,2})){3}
c、(?<![0-9])(?:(?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5])[.](?:[0-1]?[0-9]{1,2}|2[0-4][0-9]|25[0-5]))(?![0-9])

3、内网IP

解释:内网IP 包含3个段(10.0.0.0-10.255.255.255段、172.16.0.0-172.31.255.255段、192.168.0.0-192.168.255.255段)以及127.0.0.1,0.0.0.0,localhost 

a、10.0.0.0-10.255.255.255段:^10\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$
b、172.16.0.0-172.31.255.255段:^172\.(1[6789]|2[0-9]|3[01])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$
c、192.168.0.0-192.168.255.255段:^192\.168\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[0-9])$

4、邮箱地址

^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$

5、域名

a、[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?

b、^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\.)+[A-Za-z]{2,6}$

6、URL

[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

7、手机号码

^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$

8、腾讯QQ号

说明:腾讯QQ号从10000开始

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

9、电话号码

说明:包含 XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX

^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$

10、国内电话号码

说明:0511-4405222、021-87888822

\d{3}-\d{8}|\d{4}-\d{7}

11、电话号码

说明:支持手机号码,3-4位区号,7-8位直播号码,1-4位分机号

((\d{11})|^((\d{7,8})|(\d{4}|\d{3})-(\d{7,8})|(\d{4}|\d{3})-(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1})|(\d{7,8})-(\d{4}|\d{3}|\d{2}|\d{1}))$)

12、身份证号

说明:15位-18位数字,最后一位是校验位,可能为数字或字符X

(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)

13、中国邮政编码

说明:中国邮政编码为6位数字

[1-9]\d{5}(?!\d)

14、账号校验

说明:帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)

^[a-zA-Z][a-zA-Z0-9_]{4,15}$

15、密码校验

说明:密码满足以字母开头,长度在6~18之间,只能包含字母、数字和下划线

^[a-zA-Z]\w{5,17}$

16、强密码校验

强密码必须包含大小写字母和数字的组合,不能使用特殊字符,长度在 8-10 之间

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$

17、时间

a、日期正则:格式 2022-02-26

^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$

b、时间正则:格式 12:12:12

^(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$

c、日期+时间正则:格式 2022-02-26 12:12:12

① ^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])\s+(20|21|22|23|[0-1]\d):[0-5]\d:[0-5]\d$

② ^(([1-3][0-9]{3})[-]{0,1}(((0[13578]|1[02])[-]{0,1}(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)[-]{0,1}(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))\s\d{1,2}:\d{1,2}:\d{1,2})|(([1-3][0-9]{3})[-]{0,1}(((0[13578]|1[02])[-]{0,1}(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))\s\d{1,2}:\d{1,2})|(([1-3][0-9]{3})[-]{0,1}(((0[13578]|1[02])[-]{0,1}(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)[-]{0,1}(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))$

三、Java正则的简单使用

public static void main(String[] args) {
    String s="adasfdfs123123dsaf32424234sdfa";
    String regex = "\\d+";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

四、Java正则的复杂使用

1、正常提取内容

public static void main(String[] args) {
    String line = "123--we--65767 123123--sdgfs--45646 strs--12322--467658 222--zfg--24524";
    String pattern = "(\\d+)--([a-z]+)--(\\d+)";

    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(line);

    while (m.find()) {
        System.out.println(m.group(0));
        System.out.println(m.group(1));
        System.out.println(m.group(2));
        System.out.println(m.group(3));
        System.out.println("***********");
    }
}

2、复杂提取

public static void main(String[] args) {
    String s="{\"email\":\"awerandro@pwerweions.com\",\"ip\":\"123.23.23.2\"}";
    String regex = "email\":\"(\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*)\",\"ip\":\"(((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(\\.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3})\"}";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {
        System.out.println(matcher.group(0));
        System.out.println(matcher.group(1));
        //打印正则表达式中匹配的第五个括号的值。
        System.out.println(matcher.group(5));
        System.out.println("--------------");
    }
}

说明:group()方法参数的值为获取的第几个括号的条件对应的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值