正则表达式的基本语法规则
字符 | 说明 |
---|---|
^ | 表达式的开始 |
$ | 表达式的结尾 |
[a-z] | 一个字符,字符范围是 a 到 z |
[1-9] | 一个字符,字符范围是 1 到 9 |
\d | 表示一个数字(0 - 9) |
\D | 表示一个非数字(0 - 9) 除外 |
\d{n} | 表示 n 个数字,n 可以是任意值 |
\w | 表示 a 到 z、A 到 Z、0 到 9 、下划线_ |
\W | 表示除了 a 到 z、A 到 Z、0 到 9 、下划线_ 的所有 |
[\u4e00-\u9fa5] | 表示一个汉字 |
[\u4e00-\u9fa5]{n,m} | 表示 n 到 m 个汉字 |
* | 表示 0 个或者多个 * 之前的字符 |
. | 表示一个任意字符 |
+ | 表示一个或多个 + 前面的字符 |
? | 表示 0 个或一个 ? 前面的字符 |
{n} | 表示 n 个 |
{n,} | 表示 n 个或者多个 |
{n,m} | 表示 n 个 到 m 个 |
代码演示
String s = "a";
System.out.println(s.matches("[a-z]")); //true
System.out.println(s.matches("[A-Z]")); //false
System.out.println(s.matches("[1-9]")); //false
String s1 = "1";
System.out.println(s1.matches("\\d")); //true
System.out.println(s1.matches("\\D")); //false
注意,在 java 中, “ \ ” 是转义的意思 ,因此如果要使用带 “ \ ” 的符号,要使用两个 “ \ ”
String s2 = "_";
System.out.println(s2.matches("\\w")); //true
System.out.println(s2.matches("\\W")); //false
String s3 = "好";
System.out.println(s3.matches("[\\u4e00-\\u9fa5]")); //true
System.out.println(s1.matches(".")); //true
System.out.println(s2.matches(".")); //true
System.out.println(s3.matches(".")); //true
以上的正则表达式只能验证一个字符,如果输入的字符串长度大于 1 ,就会一直返回 false
String s4 = "abcdef"; //6 个字母
//判断字符串中是否有且仅有 5 个连续字符并且是字母
System.out.println(s4.matches("[a-z]{5}")); //false
//判断字符串中是否有 0 个或者 多个字母
System.out.println(s4.matches("[a-z]{0,}")); //true
//判断字符串中是否有 0 个或者 多个字母
System.out.println(s4.matches("[a-z]*")); //true
混合使用
String str = "hello java world 2021 你好";
//检查字符串中有没有 java
//任意开头,任意结尾,中间匹配 java
System.out.println(str.matches(".*java.*")); //true
//检查字符串中有没有数字
//任意开头,任意结尾,中间匹配1个或多个数字
System.out.println(str.matches(".*\\d+.*")); //true
//检查字符串中有没有汉字
//任意开头,任意结尾,中间匹配1个或多个汉字
System.out.println(str.matches(".*[\\u4e00-\\u9fa5]+.*")); //true
当然,综合使用还有很多,可以弄各种组合,要灵活运用