正则表达式(上)
正则表达式
字符类
[abc]
a
、b
或 c
(简单类)
[^abc]
任何字符,除了 a
、b
或 c
(否定)
[a-zA-Z]
a
到 z
或 A
到 Z
,两头的字母包括在内(范围)
[a-d[m-p]]
a
到 d
或 m
到 p
:[a-dm-p]
(并集)
[a-z&&[def]]
d
、e
或 f
(交集)
[a-z&&[^bc]]
a
到 z
,除了 b
和 c
:[ad-z]
(减去)
[a-z&&[^m-p]]
a
到 z
,而非 m
到 p
:[a-lq-z]
(减去)
预定义字符类
.
任何字符(与行结束符可能匹配也可能不匹配)
\d
数字:[0-9]
\D
非数字: [^0-9]
\s
空白字符:[ \t\n\x0B\f\r]
\S
非空白字符:[^\s]
\w
单词字符:[a-zA-Z_0-9]
\W
非单词字符:[^\w
Greedy 数量词
X?
X,一次或一次也没有
X*
X,零次或多次 X+
X,一次或多次
X{
n}
X,恰好 n 次
X{
n,}
X,至少 n 次
X{
n,
m}
X,至少 n 次,但是不超过 m
边界匹配器
^
行的开头
$
行的结尾
\b
单词边界
\B
非单词边界
\A
输入的开头
\G
上一个匹配的结尾
\Z
输入的结尾,仅用于最后的[结束符](如果有的话)
\z
输入的结尾
正则表达式作用:
- 检验字符串是否满足规则
- 在一段文本中查找满足要求的内容
小题一道
public static void main(String[] args) {
/*需求:
请编写正则表达式验证用户输入的手机号码是否满足需求
请编写正则表达式验证用户输入的邮箱号码是否满足需求
请编写正则表达式验证用户输入的座机号码是否满足需求
*/
//手机号码:15914493268 13535542117
//邮箱号码:1355407724@qq.com zhangsan@itcast.com dlei0009@163.com dlei0009@pci.com.cn
//座机号码:020-2324242 02122442 027-42424 0712-3242434
//书写细节:
//拿着一个正确的数据,从左到右依次去写
//手机号校验拆分成三部分
//一部分:1开头
//二部分:第二位3-9之间
//三部分:[0-9]9位
String regex1="1[3-9]\\d{9}";
System.out.println("15914493268".matches(regex1));
System.out.println("13535542117".matches(regex1));
System.out.println("---------------------------------");
//邮箱
//一部分:@左边
//二部分:@
//三部分:@右边 又可分为.左边和.右边
String regex2="\\w+@[\\w^_]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("1355407724@qq.com".matches(regex2));
System.out.println("zhangsan@itcast.com".matches(regex2));
System.out.println("dlei0009@163.com".matches(regex2));
System.out.println("dlei0009@pci.com.cn".matches(regex2));
System.out.println("---------------------------------");
//座机号:
//一:区号
//二:-
//三:号码
String regex3="0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("020-2324242".matches(regex3));
System.out.println("02122442".matches(regex3));
System.out.println("027-42424".matches(regex3));
System.out.println("0712-3242434".matches(regex3));
}
拓展练习:
IDEA中有一个any-rule的插件可以用于直接生成正则表达式
//24小时的正则表达式
String regex4="(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d";
System.out.println("23:23:42".matches(regex4));
小结
正则表达式小结:(尽量混眼熟)
符号 含义 举例
[] 里面的内容出现一次 [0-9] [a-zA-Z]
() 分组 a(bc)+
^ 取反 [^abc]
&& 交集,不能写单个的& [a-z&&m-p]
| 写在方括号外面表示并集 [a-zA-Z0-9] x|X\
. 任意字符 \n回车符号不匹配
\ 转义字符 \\d
\\d 0-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)*
+ 一次或多次 \\d+
{} 具体次数 a{7}
(?i) 忽略后面字符的大小写 (?i)abc
a((?i)b)c 只忽略b的大小写 a((?i)b)c