type
status
date
slug
summary
tags
category
icon
password
整理自B站 廖雪峰老师的正则表达式课程。
正则表达式的概述
什么是正则表达式?
正则表达式可以用字符串来描述规则,并用来匹配字符串。
正则表达式是字符串。
用字符描述规则,匹配字符。
用正则表达式的好处:
一个正则表达式就是一个描述规则的字符串。
只需要编写正确的规则,就可以让正则表达式引擎去判断目标字符串是否符合规则。
正则表达式是一套标准,可以用于任何语言。
jdk的内置正则表达式引擎:java.util.regex
匹配方向:
从左到右按规则匹配
匹配规则:
\&:精确匹配:“a\\&c” 精确匹配ac
用
.
来匹配任意一个字符。 “a.c” abc aac acc等\d: 来匹配数字: “00\\d”
\w :可以匹配一个字母,数字或下划线:“java\\w” 不能匹配#和空格。
\s: 可以匹配一个空格字符。“a\\sb”
\D:可以匹配任意一个非数字的符号(包括#)。”00\\D”
\W: 非字母,数字下划线;“java\\w” 可能是 java_
\S: 可以匹配一个非空白字符:”A\SB“ 可以是A&B ABB 不能是”A B“
*: 可以匹配任意一个字符
+:可以匹配至少1字符。
?: 可以匹配零个或一个字符。“A?B” 可以是A和B的任意字符。
{n} : 表示匹配n个字符。”\d{6}” 匹配6个数字
{n,m}:表示匹配n到m个字符。“\d{3,5}”表示匹配3到5个数字
{n,}:至少n个字符。
复杂的匹配规则:
加上
^(开头)和$(结尾)
会变得严谨,java默认只能做单行匹配,可以不加。[…]可以匹配范围内的字符:”[abc]1” 表示abc中的一个 a1 b1 c1;
[a-f]1 表出a到f中的一个和1结合;
[a-f0-9_]{6}
下划线和字母数字间没有顺序[^…]:匹配[…]内除外的所有字符
AB|CD: AB或CD
learn\s(AB|CD): learn (空格)AB或者learn (空格)CD
案例:匹配5到10位的qq号
分组匹配规则
(…)
可以用来分组:String.matches vs Pattern.mather
实际上是一样的,string的matches内部调用的就是pattern.mather
反复使用一个正则表达式进行快速匹配效率低下
可以把正则表达式字符串编译成pattern对象
使用Matcher.group(n)快速提取子串
贪婪匹配和非贪婪匹配
正则表达式的贪婪匹配
默认是贪婪匹配,就是在匹配时尽可能多地向后匹配。
非贪婪匹配
提取,搜索及替换
提取的例子
String[] String.split(String regex);
搜索的例子
Matcher.find();
替换
String.replaceAll();