JAVA学习第十三章——常用API(三【正则表达式】)

正则表达式

    public static void main(String[] args) {
/*        假如现在要求校验一个qq号码是否正确。
        规则:6位及20位之内,0不能在开头,必须全部是数字。*/

        String qq = "123456789";

        System.out.println(qq.matches("[1 - 9]\\d{5,19}"));

    }

正则表达式字符类

    public static void main(String[] args) {

        System.out.println("----------------1---------------------");
        System.out.println("a".matches("[abc]"));
        System.out.println("z".matches("[abc]"));
        System.out.println("ab".matches("[abc]"));

        System.out.println("----------------2---------------------");
        System.out.println("a".matches("[^abc]"));
        System.out.println("z".matches("[^abc]"));
        System.out.println("zz".matches("[^abc]"));
        System.out.println("zz".matches("[^abc][^abc]"));

        System.out.println("----------------3---------------------");
        System.out.println("a".matches("[a-zA-Z]"));
        System.out.println("z".matches("[a-zA-Z]"));
        System.out.println("aa".matches("[a-zA-Z]"));
        System.out.println("zz".matches("[a-zA-Z]"));
        System.out.println("0".matches("[a-zA-Z]"));

        System.out.println("----------------4---------------------");
        System.out.println("a".matches("[a-d[m-p]]"));
        System.out.println("d".matches("[a-d[m-p]]"));
        System.out.println("m".matches("[a-d[m-p]]"));
        System.out.println("p".matches("[a-d[m-p]]"));
        System.out.println("e".matches("[a-d[m-p]]"));
        System.out.println("0".matches("[a-d[m-p]]"));

        System.out.println("----------------5---------------------");
        System.out.println("a".matches("[a-z&&[def]]"));
        System.out.println("d".matches("[a-z&&[def]]"));
        System.out.println("0".matches("[a-z&&[def]]"));

        System.out.println("----------------6---------------------");
        System.out.println("a".matches("[a-z&&[^bc]]"));
        System.out.println("b".matches("[a-z&&[^bc]]"));
        System.out.println("0".matches("[a-z&&[^bc]]"));

        System.out.println("----------------7---------------------");
        System.out.println("a".matches("[a-z&&[^m-p]]"));
        System.out.println("m".matches("[a-z&&[^m-p]]"));
        System.out.println("0".matches("[a-z&&[^m-p]]"));

    }
方法名说明
[abc]只能是abc
[^abc]除了abc之外的任何字符
[a-zA-Z]a到z A到Z,包括(范围)
[a-d[m-p]]a到d,或m到p
[a-z&&[def]]a-z和def的交集。 为:def
[a-z&&[^bc]]a-z和非bc的交集。 (等同于[ad-z])
[a-z&&[^m-p]]a到z和除了m到p的交集。 (等同于[a-lq-z])

正则表达式预定义字符

    public static void main(String[] args) {

        System.out.println("----------------1---------------------");
        System.out.println("你".matches(".."));
        System.out.println("你".matches("."));
        System.out.println("你a".matches(".."));

        System.out.println("----------------2---------------------");
        // 两个\表示一个\
        System.out.println("a".matches("\\d"));
        System.out.println("3".matches("\\d"));
        System.out.println("333".matches("\\d"));
        System.out.println("333".matches("\\d\\d\\d"));

        System.out.println("----------------3---------------------");
        System.out.println("z".matches("\\w"));
        System.out.println("2".matches("\\w"));
        System.out.println("21".matches("\\w"));
        System.out.println("你".matches("\\w"));
        System.out.println("_".matches("\\w"));

        System.out.println("----------------4---------------------");
        System.out.println("你".matches("\\W"));

        System.out.println("----------------5---------------------");
        System.out.println("2244fsfsf".matches("\\w{6,}"));
        System.out.println("224f".matches("\\w{6,}"));

        System.out.println("----------------6---------------------");
        System.out.println("23dF".matches("[a-zA-Z0-9]{4}"));
        System.out.println("23_F".matches("[a-zA-Z0-9]{4}"));
        System.out.println("23dF".matches("[\\w&&[^_]]{4}"));
        System.out.println("23_F".matches("[\\w&&[^_]]{4}"));
        }
方法名说明
\d一个数字:[0-9]
\D非数字:[^0-9]
\s一个空白字符:[\t\n\x0B\f\r]
\S非空白字符:[^\s]
\w[a-zA-Z_0-9]英文、数字、下划线
\W[^\w]一个非单词字符
X?X,一次或0次
X*X,零次或多次
X+X+
X{n}X,正好n次
X{n,}X,至少n次
X{n,m}X,至少n但不超过m

练习一

请编写正则表达式验证用户输入的手机号码是否满足要求。
请编写正则表达式验证用户输入的邮箱号是否满足要求。
请编写正则表达式验证用户输入的电话号码是否满足要求。

    public static void main(String[] args) {
        //第一部分:1 表示手机号码只能以1开头
        //第二部分:[3 - 9] 表示手机号码第二位只能是3-9之间
        //第三部分:\\d{9} 表示任意数字可以出现9次,也只能出现9次
        String regex1 = "1[3-9]\\d{9}";
        System.out.println("13112345678".matches(regex1));
        System.out.println("13712345698".matches(regex1));
        System.out.println("13612348678".matches(regex1));
        System.out.println("13412355678".matches(regex1));
        System.out.println("--------------------------------------------------");

        String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
        System.out.println("023-123456".matches(regex2));
        System.out.println("023-72348".matches(regex2));
        System.out.println("023-123456789".matches(regex2));
        System.out.println("--------------------------------------------------");

        String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
        System.out.println("323233@qq.com".matches(regex3));
        System.out.println("dlei0009@pci.com.cn".matches(regex3));

        //24小时的正则表达式
        String regex4 = "([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";

    }

练习二

请编写正则表达式验证用户名是否满足要求
要求:大小写字母,数字,下划线一共4-16位
请编写正则表达式验证身份证号码是否满足要求
简单要求:18位,前17位任意数字,最后一位可以是数字可以是大写或小写的X
复杂要求:按照身份证号码的格式严格要求

    public static void main(String[] args) {
        String regex1 = "\\w{4,16}";
        System.out.println("zhangsan".matches(regex1));
        System.out.println("lisi".matches(regex1));
        System.out.println("$123".matches(regex1));
        System.out.println("------------------------------------------");

        String regex2 = "[1-9]\\d{16}(\\d|X|x)";
        String regex3 = "[1-9]\\d{16}[\\dXx]";
        System.out.println("41080119930228457x".matches(regex2));
        System.out.println("41080119930228457x".matches(regex3));
        System.out.println("510807986224872166".matches(regex2));
        System.out.println("510807986224872166".matches(regex3));
        System.out.println("------------------------------------------");

        //在匹配的时候忽略abc的大小写
        String regex4 = "(?i)abc";
        String regex5 = "a(?i)bc";
        String regex6 = "a((?i)b)c";
        System.out.println("abc".matches(regex4));
        System.out.println("ABC".matches(regex4));
        System.out.println("------------------------------------------");
        System.out.println("ABC".matches(regex5));
        System.out.println("aBC".matches(regex5));
        System.out.println("------------------------------------------");
        System.out.println("aBC".matches(regex6));
        System.out.println("aBc".matches(regex6));

        //严格身份证号码要求
        String regex7 = "[1-9]\\d{5}(?:18|19|20)\\d{2}(?:0\\d|10|11|12)(?:0[1-9]|[1-2]\\d|30|31)\\d{3}[\\dXx]";
    }
符号含义举例
[ ]里面的内容出现一次[0 - 9] [a - zA - Z0 - 9]
( )分组a (b c) +
^取反[^abc]
&&交集,不能写单个的&[a-z&&m-p]
I写在方括号外面表示并集[a-zA-Z0-9] x I X
.任意字符\n 回车符号不匹配
\转义字符\ \ d
\ \ d0 - 9\ \ d+
\ \ D非0 - 9\ \ D+
\ \ s空白字符[ \ t \ n \ x0B \ f \ r]
\ \ S非空白字符[^ \ s]
\ \ w单词字符[a - zA - Z_0 - 9]
\ \ W非单词字符[^ \ w]
?0次或1次\ \ d?
*0次或多次\ \ d* (abc)*
+1次或多次\ \ d+ (abc)+
{ }具体次数a{7} \ \ d{7,19}
(?i)忽略后面字符的大小写(?i)abc
a((?i)b)c只忽略b的大小写a((?i)b)c

Tips

以上学习内容均来自于B站黑马程序员

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值