正则表达式
1.用处:用于匹配字符串
2.工具类
1.Pattern类
-
看JDK源码可知,Pattern类的构造方法被private修饰,没有提供公共的构造方法!
-
那在外部如何创建对象呢?
进一步看源码可知,Pattern类里面提供了1个compile的静态方法,返回一个new Pattern,可知:可通过Pattern.compile(参数)来创建一个Pattern对象
2.Matcher类
- 同Pattern类一样,Matcher类也没有提供公共的构造方法!
- 那在外部如何创建对象呢?
在Pattern类的内部有一个matcher方法来new一个Matcher对象
3.使用
Pattern.matches(regex, input);
第1个参数是 你想要按照怎样的字段匹配,regex --> 正则表达式
第2个参数是 你提供的字符串 input --> 输入
如果匹配成功,则返会true,否则返会false
4.用法
1.整体
regex | 含义 |
---|---|
. | 任意1个字符 |
[] | 例如[a-z],表示在 大于或等于a且小于或等于z的范围内,取1个字符(只能取1个) |
| | 逻辑或 |
() | 匹配多个字符 |
^ | 范围取反 |
+ | 例如[a-z]+, 在a到z的区间内取大于或等于1个的字符(可不相同) |
{} | 例如[a-z]{3, 5},在a-z的范围内取3到5个字符(这里不能敲空格) |
* | 代表任意个字符 |
\d | 取[0-9]之间的一个字符 |
\D | 表示除去[0-9]之间的,其他的任意一个字符,即[^0-9] |
\w | \w表示[0—9A—Z_a—z] |
\W | [^_0—9A—Z_a—z] |
2.详细介绍
// Pattern.matches(regex, input)
// 001 . Java中 "a.c"-->代表 "^a.c$" ,不写也会默认加上 ^和$,表示以a开始,以c结束
System.out.println(Pattern.matches("a.c", "abc")); // true
// 只有严格的以a开始,中间包含1个字符的,才返回true
System.out.println(Pattern.matches("a.c", "aaabcccc")); // false
System.out.println(Pattern.matches("a.c", "ac")); // false
System.out.println("---------------");
// 002 [] [a-z]表示在 大于或等于a且小于或等于z的范围内,取1个字符(只能取1个)
System.out.println(Pattern.matches("a[a-z]c", "abc")); // true
System.out.println(Pattern.matches("a[a-z]c", "ayc")); // true
System.out.println(Pattern.matches("a[a-z]c", "abyc")); // false
System.out.println("---------------");
// 003 | 逻辑或
System.out.println(Pattern.matches("[a-z|A-Z|_|$]", "$")); // true
System.out.println(Pattern.matches("[a-z|A-Z|_|$]", "_")); // true
System.out.println(Pattern.matches("[a-z|A-Z|_|$]", "A")); // true
System.out.println("---------------");
// 004 () 匹配多个字符
System.out.println(Pattern.matches("a(bb|c|dd)c", "abbc")); // true
System.out.println(Pattern.matches("a(bb|c|dd)c", "acc")); // true
System.out.println(Pattern.matches("a(bb|c|dd)c", "addc")); // true
System.out.println("---------------");
// 005 ^ 范围取反
// 在a到z的范围取1个字符,则返回true
System.out.println(Pattern.matches("[a-z]", "b")); // true
// 在a到z的范围取1个字符,返回false;在a到z的范围之外,返回true
System.out.println(Pattern.matches("[^a-z]", "b")); // false
System.out.println(Pattern.matches("[^a-z]", "A")); // true
System.out.println("---------------");
// 006 + 在某个范围内至少有1个字符
// [a-z]+ 在a到z的区间内取多个可不相同的字符
System.out.println(Pattern.matches("a[a-z]+c", "abc")); // true
System.out.println(Pattern.matches("a[a-z]+c", "ac")); // false
System.out.println(Pattern.matches("a[a-z]+c", "abbc")); // true
System.out.println(Pattern.matches("a[a-z]+c", "abdc")); // true
System.out.println("---------------");
// 007 ? 在某个范围内 取0个或者1个字符
System.out.println(Pattern.matches("a[a-z]?c", "ac")); // true
System.out.println(Pattern.matches("a[a-z]?c", "ayc")); // true
System.out.println(Pattern.matches("a[a-z]?c", "axyc")); // false
System.out.println("---------------");
// 008 [a-z]{3,} 在某个范围内 取3个或者3个以上字符
// [a-z]{3, 5}在a-z的范围内取3到5个字符(这里不能敲空格)
System.out.println(Pattern.matches("a[a-z]{3,5}c", "axyc")); // false
System.out.println(Pattern.matches("a[a-z]{3,5}c", "axyzc")); // true
System.out.println(Pattern.matches("a[a-z]{3,5}c", "axyzxc")); // true
System.out.println(Pattern.matches("a[a-z]{3,5}c", "axyzxyc")); // true
System.out.println("---------------");
// 009 * 代表0次或者多次
// b的前面、后面可以是0个或多个字符,即:后面的字符串包含b即可
System.out.println(Pattern.matches(".*b.*", "byc")); // true
System.out.println(Pattern.matches(".*b.*", "axb")); // true
System.out.println(Pattern.matches(".*b.*", "axbyc")); // true
System.out.println("---------------");
// 010 快捷符号
// 01 \d表示取[0-9]之间的一个字符
// 02 \D表示除去[^0-9]之间的,其他的任意一个字符
// 03 \w表示[0—9|A—Z|_|a—z]
// 04 \W表示[^_|0—9|A—Z|a—z]
// 因为.是特殊字符所以我要转义.所以我需要工具\来转义
// 所以我要\,.也是特殊字符,所以我要转义\,通过\转义\来拿到工具\
System.out.println(Pattern.matches(".*\\..*", "5.6")); // true
System.out.println(Pattern.matches(".*\\..*", "abc.xy")); // true
System.out.println("---------------");
// 01 \d表示取[0-9]之间的一个字符
// 02 \D表示除去[^0-9]之间的,其他的任意一个字符
System.out.println(Pattern.matches("\\d", "5")); // true
System.out.println(Pattern.matches("\\d", "5y")); // false
System.out.println(Pattern.matches("\\D", "a")); // true
System.out.println(Pattern.matches("\\D", "$")); // true
System.out.println(Pattern.matches("\\D", "_")); // true
System.out.println("---------------");
// 03 \w表示[_|0—9|A—Z|a—z]
// 04 \W表示[^_|0—9|A—Z|a—z]
System.out.println(Pattern.matches("\\w", "_")); // true
System.out.println(Pattern.matches("\\w", "5")); // true
System.out.println(Pattern.matches("\\w", "A")); // true
System.out.println(Pattern.matches("\\w", "z")); // true
System.out.println(Pattern.matches("\\w", "$")); // false
System.out.println("---------------");
System.out.println(Patter.matches("\\W", "$")); // true
System.out.println(Pattern.matches("\\W", "_")); // false
注:本文是个人学习Java过程中的一些理解与心得,以理解为主,口头语言描述的可能不很恰当以及知识点不太全面,但如有错误,请大家批评指正,互相学习。