Java中正则表达式的使用

    开发过程中,经常需要判断字符串是否符合某种规则,例如,手机号验证,身份证号验证,密码复杂度是否达到要求等。如果每次都要用一堆 if 语句来匹配规则,代码就会显得比较臃肿。

    正则表达式作为Java提供给我们的一种规则判断的方式,因为对其写法的不熟悉,在以往开发过程中很少使用,现在总结一下它的用法,方便以后开发中参考使用。

    废话差不多了,下面开始正式介绍:

字符串

 首先第一个看下普通字符串,比如  abc  ,它可以作为一个正则表达式语句使用,表示**完全匹配**  abc  的字符串,看下测试代码:
        String regex = "abc";

        String input0 = "abc";  // 无其他内容
        String input1 = "Aabc"; // 前面有其他内容
        String input2 = "abcA"; // 后面有其他内容
        String input3 = "AabcA";// 前后都有其他内容
        String input4 = "aAbc"; // 中间有其他内容

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

看下控制台的输出:
这里写图片描述

可以看到,只有完全匹配时才能返回 true

点(.)的使用

点可以代替任意单个字符使用:

        regex = ".";

        input0 = "#";   // 单个特殊字符
        input1 = "0";   // 单个数字
        input2 = "a";   // 单个字符
        input3 = "20";  // 多个数字
        input4 = "*A#4";// 多个字符

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

这里写图片描述

可以看出,任何单个字符后可以匹配成功,多字符会返回false

星(*)的使用

* 表示0个或多个,如 “ab*” 表示 a 后面跟着 0 个或多个 b :

        regex = "ab*";

        input0 = "a";       // a 后面 0 个 b
        input1 = "ab";      // a 后面 1 个 b
        input2 = "abbbb";   // a 后面 多 个 b
        input3 = "abc";     // a 后面 1个 b 后面还有其他字符
        input4 = "acb";     // a 和 b 之间隔有其他字符

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

这里写图片描述

加号(+)的使用

+ 表示1个或多个,如 “ab+” 表示 a 后面跟着至少一个b :

        regex = "ab+";

        input0 = "a";       // a 后面 0 个 b
        input1 = "ab";      // a 后面 1 个 b
        input2 = "abbbb";   // a 后面 多 个 b
        input3 = "abc";     // a 后面 1个 b 后面还有其他字符
        input4 = "acb";     // a 和 b 之间隔有其他字符

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

这里写图片描述

问号(? )的使用

? 表示 0 个或 1 个:
        regex = "ab?";

        input0 = "a";       // a 后面 0 个 b
        input1 = "ab";      // a 后面 1 个 b
        input2 = "abbbb";   // a 后面 多 个 b

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));

这里写图片描述

括号的使用 () [] {}

( ) 内的内容表示的是一个子表达式,()本身不匹配任何东西,也不限制匹配任何东西,只是把括号内的内容作为同一个表达式来处理。
[ ] 表示匹配的字符在[]中,并且只能出现一次,并且特殊字符写在[]会被当成普通字符来匹配。
{ } 用来表示匹配的长度。

例如:
(ab) 表示匹配字符串 ab
[a-zA-Z0-9] 表示匹配单个字母或数字
[a-zA-Z0-9]{3} 表示匹配 3 个字母或数字
[a-zA-Z0-9]{3,6} 表示匹配 3 到 6 个字母或数字
(ab){3,} 表示出现三次以上 ab

        regex = "(ab)";

        input0 = "a";
        input1 = "ab";
        input2 = "abbbb";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));

这里写图片描述

        regex = "[a-zA-Z0-9]";

        input0 = "a";
        input1 = "5";
        input2 = "ab";
        input3 = "%";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));

这里写图片描述

        regex = "[a-zA-Z0-9]{3,6}";

        input0 = "a";
        input1 = "5aF";
        input2 = "fe5xGQ";
        input3 = "dwkaca5F";
        input4 = "dwk%";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

这里写图片描述

^ 和 $ 的使用

^ 表示开头,比如 “^[0-9]+.*”表示以数字开头
$ 表示结尾,比如 “^[0-9]$”表示纯数字

注意:方括号里用’^’表示不希望出现的字符,’^’应在方括号里的第一位。(如:”%[^a-zA-Z]%”表示两个百分号中不应该出现字母)

        regex = "^[0-9]+.*";

        input0 = "5a";
        input1 = "56";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));

        System.out.println("--------------------------");

        regex = "^[0-9]+$";

        input0 = "5a";
        input1 = "56";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));

这里写图片描述

常用字符

\d 匹配一个数字字符,等价于 [0-9]
\D 匹配一个非数字字符,等价于 [^0-9]
\w 表示数字、26个英文字母、下划线,等价于[a-zA-Z0-9_]
\W 表示非数字、26个英文字母、下划线,等价于[^a-zA-Z0-9_]

其他常用参考:正则表达式全部符号解释

测试类完整代码:

public class Test {
    public static void main(String[] args) {

        String regex = "abc";

        String input0 = "abc"; // 无其他内容
        String input1 = "Aabc"; // 前面有其他内容
        String input2 = "abcA"; // 后面有其他内容
        String input3 = "AabcA";// 前后都有其他内容
        String input4 = "aAbc"; // 中间有其他内容

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

        System.out.println("--------------------------");

        regex = ".";

        input0 = "#"; // 单个特殊字符
        input1 = "0"; // 单个数字
        input2 = "a"; // 单个字符
        input3 = "20"; // 多个数字
        input4 = "*A#4";// 多个字符

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

        System.out.println("--------------------------");

        regex = "^abc";

        input0 = "abcdef"; // abc 开头
        input1 = "Aabc"; // 其他字符开头

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));

        System.out.println("--------------------------");

        regex = "abc$";

        input0 = "ABCabc"; // abc 结尾
        input1 = "abcABC"; // 其他字符结尾

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));

        System.out.println("--------------------------");

        regex = "ab*";

        input0 = "a";       // a 后面 0 个 b
        input1 = "ab";      // a 后面 1 个 b
        input2 = "abbbb";   // a 后面 多 个 b
        input3 = "abc";     // a 后面 1个 b 后面还有其他字符
        input4 = "acb";     // a 和 b 之间隔有其他字符

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

        System.out.println("--------------------------");

        regex = "ab+";

        input0 = "a";       // a 后面 0 个 b
        input1 = "ab";      // a 后面 1 个 b
        input2 = "abbbb";   // a 后面 多 个 b
        input3 = "abc";     // a 后面 1个 b 后面还有其他字符
        input4 = "acb";     // a 和 b 之间隔有其他字符

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

        System.out.println("--------------------------");

        regex = "ab?";

        input0 = "a";       // a 后面 0 个 b
        input1 = "ab";      // a 后面 1 个 b
        input2 = "abbbb";   // a 后面 多 个 b

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));

        System.out.println("--------------------------");

        regex = "(ab)";

        input0 = "a";
        input1 = "ab";
        input2 = "abbbb";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));

        System.out.println("--------------------------");

        regex = "[a-zA-Z0-9]";

        input0 = "a";
        input1 = "5";
        input2 = "ab";
        input3 = "%";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));

        System.out.println("--------------------------");

        regex = "[a-zA-Z0-9]{3,6}";

        input0 = "a";
        input1 = "5aF";
        input2 = "fe5xGQ";
        input3 = "dwkaca5F";
        input4 = "dwk%";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));
        System.out.println(Pattern.matches(regex, input2));
        System.out.println(Pattern.matches(regex, input3));
        System.out.println(Pattern.matches(regex, input4));

        System.out.println("--------------------------");

        regex = "^[0-9]+.*";

        input0 = "5a";
        input1 = "56";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));

        System.out.println("--------------------------");

        regex = "^[0-9]+$";

        input0 = "5a";
        input1 = "56";

        System.out.println(Pattern.matches(regex, input0));
        System.out.println(Pattern.matches(regex, input1));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值