文章目录
-
- 先爽一下正则表达式
- 一、正则表达式中的字符含义:
- 1.匹配单个字符
- 1.`[abc]` 只能是 a , b ,c 其中一个,代码如下:
- 2. `[^abc]` 不能出现 a b c 其中的一个,代码如下:
- 3`[a-zA-Z]`和`[a-z[A-Z]]`一样 :a到z A到Z(包括头尾的范围)代码如下
- 4.`[a-z&&[def]]` a-z和def的交集。 为d,e,f
- 5.`[a-z&&[^bc]]`a-z和非bc的交集 (等同于`[ad-z]`)
- 6.`[a-z&&[^m-p]]` a-z和除了m-p的交集 (等同于`[a-lq-z]`)
- 7.`.` 表示任意一个字符
- 8.`\\d`表示只能是以为数字
- 9.`\\w`只能式一位单词字符 (相当于`[a-zA-Z_0-9]`)
- 10.`\\W` 非单词字符
- 2.数量词(可以匹配多个字符了)
-
- 二、使用正则表达式写简单案例
-
文章目录
- 先爽一下正则表达式
- 一、正则表达式中的字符含义:
- 1.匹配单个字符
- 1.`[abc]` 只能是 a , b ,c 其中一个,代码如下:
- 2. `[^abc]` 不能出现 a b c 其中的一个,代码如下:
- 3`[a-zA-Z]`和`[a-z[A-Z]]`一样 :a到z A到Z(包括头尾的范围)代码如下
- 4.`[a-z&&[def]]` a-z和def的交集。 为d,e,f
- 5.`[a-z&&[^bc]]`a-z和非bc的交集 (等同于`[ad-z]`)
- 6.`[a-z&&[^m-p]]` a-z和除了m-p的交集 (等同于`[a-lq-z]`)
- 7.`.` 表示任意一个字符
- 8.`\\d`表示只能是以为数字
- 9.`\\w`只能式一位单词字符 (相当于`[a-zA-Z_0-9]`)
- 10.`\\W` 非单词字符
- 2.数量词(可以匹配多个字符了)
- 二、使用正则表达式写简单案例
先爽一下正则表达式
校验qq账号是否符合要求:
//qq账号规则为:不能以0开头,必须全都是数字,而且长度在6位及20位之间
String qq = "123456789";
boolean flag = qq.matches("[1-9]\\d{5,19}");
System.out.println(flag);//true
你只要把qq账号的正则表达式写出来,检验就交给matches()方法就好了,从这就可以开出来正则表达式是非常方便,非常神奇的。但是正则表达式不仅仅只有这一个功能。它的功能我给你总结出来了:
作用一:校验字符串是否满足规则
作用二:在一段文本中查找满足要求的内容
一、正则表达式中的字符含义:
1.匹配单个字符
1.[abc]
只能是 a , b ,c 其中一个,代码如下:
System.out.println("a".matches("[abc]"));//true
System.out.println("z".matches("[abc]"));//false
System.out.println("ab".matches("[abc]]"));//false
System.out.println("ab".matches("[abc][abc]"));//true
2. [^abc]
不能出现 a b c 其中的一个,代码如下:
//不能出现 a b c
System.out.println("a".matches("[^abc]"));//false
System.out.println("z".matches("[^abc]"));//true
System.out.println("zz".matches("[^abc]"));//false
System.out.println("zz".matches("[^abc][^abc]"));//true
3[a-zA-Z]
和[a-z[A-Z]]
一样 :a到z A到Z(包括头尾的范围)代码如下
System.out.println("a".matches("[a-zA-Z]"));//true
System.out.println("z".matches("[a-z[A-Z]]"));//true
System.out.println("aa".matches("[a-zA-Z]"));//false
System.out.println("aa".matches("[a-zA-Z][a-zA-Z]"));//true
System.out.println("A".matches("[a-zA-Z]"));//true
System.out.println("0".matches("[a-zA-Z]"));//false
4.[a-z&&[def]]
a-z和def的交集。 为d,e,f
注意细节:如果要求两个范围的交集,那么需要写符号 &&。如果写成一个&,那么此时&表示就不是交集了,而是一个简简单单的&符号
System.out.println("a".matches("[a-z&&[def]]"));//false
System.out.println("d".matches("[a-z&&[def]]"));//true
System.out.println("0".matches("[a-z&&[def]]"));//false
5.[a-z&&[^bc]]
a-z和非bc的交集 (等同于[ad-z]
)
System.out.println("a".matches("[a-z&&[^bc]]"));//true
System.out.println("d".matches("[a-z&&[^bc]]"));//true
System.out.println("0".matches("[a-z&&[^bc]]"));//false
6.[a-z&&[^m-p]]
a-z和除了m-p的交集 (等同于[a-lq-z]
)
System.out.println("a".matches("[a-z&&[^m-p]]"));//true
System.out.println("m".matches("[a-z&&[^m-p]]"));//false
System.out.println("0".matches("[a-z&&[^m-p]]"));//false
在java中 ’ \ ’ 为转移字符 改变后边那个字符原本的含义
练习:以字符串的形式打印一个双引号
System.out.println(" \" ");// "
提示 :两个 ’ \ ’ 表示一个’ \ ’
7..
表示任意一个字符
System.out.println("你".matches(".."));//false
System.out.println("你a".matches(".."));//true
8.\\d
表示只能是以为数字
System.out.println("a".matches("\\d"));//false
System.out.println("3".matches("\\d"));//true
System.out.println("333".matches("\\d"));//false
9.\\w
只能式一位单词字符 (相当于[a-zA-Z_0-9]
)
System.out.println("z".matches("\\w"));//true
System.out.println("2".matches("\\w"));//true
System.out.println("21".matches("\\w"));//false
System.out.println("你".matches("\\w"));//false
10.\\W
非单词字符
System.out.println("你".matches("\\W"));//true
2.数量词(可以匹配多个字符了)
上图中的X表示任意内容
代码演示如下:
1.X{n,}至少n次
//必须是数字 字母 下划线 至少 6位 **X{n,}**
System.out.println("2242fsfsf".matches("\\w{6,}"));//true
System.out.println("224f".matches("\\w{6,}"));//false
2.X{n} 正好n次
//必须是数字和字符 必须是4位
System.out.println("224f".matches("[a-zA-Z0-9]{4}"));//true
System.out.println("22_f".matches("[a-zA-Z0-9]{4}"));//false
System.out.println("22df".matches("[\\w&&[^_]]{4}"));//true
System.out.println("23_f".matches("[\\w&&[^_]]{4}"));//false
二、使用正则表达式写简单案例
编写正则表达式心得:拿着一个正确的数据,从左到右依次去写
1.验证手机号是否满足要求
正确的电话号码:18830276498
//18830276498
String regex1 = "1[3-9]\\d{9}";//表示 1[3-9][0-9]{9}
System.out.println("18830276498".matches(regex1));//true
System.out.println("19566115677".matches(regex1));//true
System.out.println("188302764981".matches(regex1));//false
2.验证座机电话号码
正确的电话号码:020-2324242
或 0321-3242421
或 02122442
或 027-42424
代码如下(示例):
//`020-2324242` 或 `0321-3242421` 或 `02122442` 或 `027-42424`
//第一部分:区号 0\d{2,3} 一定是以0开头 ,从第二位开始是任意的数字,可以出现2到3次
//第二部分:- ?表示次数0次或1次
//第三部分:号码 [1-9]\d{4,9}:号码的第一位也不能以0开头,从第二位开始可以是任意的数字,号码的总长度可以是:5-10位
String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("020-2324242".matches(regex2));//true
System.out.println("0321-3242421".matches(regex2));//true
System.out.println("02122442".matches(regex2));//true
System.out.println("027-42424".matches(regex2));//true
3.校验邮箱号码
正确的邮箱:2042501541@qq.com
或者 zhangsan@haoyun.cnn
或者 dlei0009@163.com
或者 dlei0009@pco.com.cn
//邮箱号码 `2042501541@qq.com` 或者 `zhangsan@haoyun.cnn` 或者 `dlei0009@163.com` 或者 `dlei0009@pco.com.cn`
//思路:
//书写邮箱分为三部分
//第一部分:@的左边 可以是数字也可以是字母也可以是 _
// \\w+ 表示任意的字母数字下划线,至少出现一次就可以了
//第二部分:@ 只能出现一次
//第三部分:
// 第一线:.的左边 [\\w&&[^_]]{2,6} 任意的字母加数字,总共出现2-6次(不能出现下滑线)
// 第二段:. \\. 一个.
// 第三段:大写字母,小写字母都可以,只能出现2-3次 [a-zA-Z]{2,3}
// 我们可以把第二段和第三段 看成一组,这一组可以出现1次或两次
String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("2042501541@qq.com".matches(regex3));//true
System.out.println("zhangsan@haoyun.cnn".matches(regex3));//true
System.out.println("dlei0009@163.com".matches(regex3));//true
System.out.println("dlei0009@pco.com.cn".matches(regex3));//true