一.标准字符集合
1.普通字符: 字母,数字,汉字,下划线,没有特殊定义的标点符号
2.转义字符
\n | 换行符 |
\t | 制表符 |
\\ | \本身 |
\^,\$,\+,\?, \(, \), \*等 | 这些字符本身 |
3.标准字符集合: 能够与多种字符匹配的表达式
!!!注意区分大小写,大写是相反的意思
\d | 任意数字 *(\d\d匹配任意两位数字) |
\w | 任意 数字, 字母(包括大小写), 下划线 |
\s | 任意 空白字符(空格,制表符,换行符) |
. | 任意 字符(不包括换行符) |
*[\s\S] | 任意 字符 |
二.自定义字符集合
[],匹配括号内任意一个字符
[ab5@] | 匹配a/b/5/@ |
[^abc] | 匹配abc之外的任意一个字符 |
[f-k] | 匹配f-k之间任意一个字符 |
[^0-3a-f] | 匹配0-3和a-f之外的任意一个字符 |
* 除^ -外, 正则表达式中的特殊符号, 在[]内失去特殊意义.
*标准字符集合, 除小数点外,如果包含在[]内,则自定义字符集合包括该集合
eg. [\d.\-+] 匹配: 数字, 小数点, -, +
三.量词
{n} | 表达式重复n次 | \d{6} 匹配任意六位数字 |
{m,n} | 表达式至少重复m次, 最多重复n次 *首先匹配最多位, 后加?先匹配最少位 | \d{3,5}? 匹配3/4/5位的数字,优先匹配3位 |
{m,} | 表达式至少重复n次(没有最多多少次的写法) | |
? | 匹配表达式0次/1次,相当于{0,1} | a\d{0,1}b = a\d?b ab之间有1个数字/ 仅ab |
+ | 表达式出现至少1次, 相当于{1,} | a\d+b ab之间至少有一个数字 |
* | 表达式不出现/出现任意次, 相当于{0,} |
四.字符边界(匹配位置,零宽)
^ | 与字符串开始的方匹配 | ^i 若字符串第一个字母为i,则匹配 |
$ | 与字符串结束的地方匹配 | i$ |
\b | 匹配一个单词边界 前面的字符和后面的字符不全是\w | hwz\b 匹配hwz,且z后不为\w \bhwz 匹配hwz,且h前不为\w |
五.匹配模式
IGNORECASE 忽略大小写
SINGLELINE 单行模式: 将整个文本看做一个字符串
MULTILINE 多行模式,每一行都是一个zifuchuan eg.^i 匹配每一行开头的i (若只想匹配第一个则: \Ai)
六.选择符和分组
| | 或的关系 | ab|bc 匹配ab或bc |
()捕获组 | 根据每个括号(的次序,从1开始为每一对括号进行编号 | ([a-z]{2})\1 ()内为捕获组,捕获两个连续连个字母,\1代表第一个捕获组 ==>捕获ABAB式字母 |
(?:表达式) 非捕获组 | 一些表达式中不得不使用(), 但又不需要保存()中匹配的内容 |
六.预搜索(零宽断言): 只进行子表达式的匹配, 其本身不计入最终的匹配结果
(?=exp) | 位置后面能匹配表达式exp | [a-z]+(?=\d+) 匹配所有后面带数字的单词, 不包括数字本身 |
(?!exp) | 位置后面不能匹配表达式exp | [a-z]+(?!\d+) 后面不为数字的单词 *若abc3, 匹配ab |
(?<=exp) | 位置前面能匹配表达式exp | |
(?<!exp) | 位置前面不能匹配表达式exp |
七.正则表达式在不同软件中的使用
1.数据库: select * from tablename where 列名 REGEXP '正则表达式';
2.java中使用正则表达式
@Test
public void test3() {
//表达式对象
Pattern p=Pattern.compile("([0-9]+)([a-z]+)");
//创建matcher对象
Matcher m=p.matcher("djf32dsd24hh5nn66j544");
while(m.find()) { //查找下一个符合的字符串,若存在返回true
System.out.println(m.group()); //返回当前查找的字符串
System.out.println(m.group(1)); //group()内的数字代表捕获组分组的编号
System.out.println(m.group(2));
}
//替换
String newstr=m.replaceAll("*");
System.out.println(newstr);
//分割字符串使用正则表达式
String s="dfdf443jjj45nin232jfid";
String str[]=s.split("[\\d]+"); //将字符串以数字为边界分割
System.out.println(Arrays.toString(str));
}
运行结果: