文章目录
正则表达式
1.什么是正则表达式?
1.1背景介绍
人类神经系统早期研究称之为:正则集的代数的表达式,有多种定义:
- 用某种模式去匹配一类字符串的公式,主要用来描述字符串匹配的工具;
- 由普通字符和特殊字符(元字符)组成的文字模式;
- 用于描述某些规则的工具,即记录文本规则的代码;
- 用一个字符串描述一个特征,然后去验证另外一个字符串是否符合这个特征;
1.2匹配类型
- 形容词性匹配:一个字符串匹配一个正则表达式;
- 动词性匹配: 在文本或字符串里匹配正则表达式;
- 名词性匹配: 在字符串中满足给定的正则表达式的一部分;
1.3常见应用
- 验证字符串;
- 查找字符串;
- 替换字符串;
- 提取字符串;
2.元字符
2.1匹配位置的元字符
^ : 脱字符号,匹配行的开始;
$ : 美元符号,匹配航的结尾;
\b: 匹配单词的开始或结尾;
例子:
^string => 匹配"string"开始的行;
string$ => 匹配"string"结尾的行;
^$ => 匹配空行;
^ => 匹配任意行;
\bstr => 匹配以"str"开头的字符串,如"String"、“String Format”;
\bstring\b => 匹配完整单词"String";
2.2匹配字符的元字符
.(圆点) => 匹配任意字符(除了换行符);
\w => 匹配单词字符(数字、字母、下划线、汉字);
\W => 匹配任意非单词字符(换行符也会匹配);
\s => 匹配任意空白字符(空格、制表符、换行符、中文全角空格等);
\S => 匹配任意非空白字符
\d => 匹配任意的数字;
\D => 匹配任意的非数字字符;
例子:
- ^.$ => 除换行符外可含任意字符的行;
- \ba\w\w\w\b => 以"a"开头且长度为4的任意单词;
- \ba\w\w\d\d\D\b => 匹配"a"+2单词字符+2数字+1非数字,如:“a1b23_”;
- 2020.11.27 => 匹配除换行符之外以任意字符分割字符串"2020",“11”,"27"的字符串,如:2020.11.27、2020=11-27、2020 11 27、2020-11/27;
3.字符类匹配
3.1字符类
注:此处元字符失去意义,只表示字符本意;
- [0123456789] => 匹配任意数字;
- <H[123456]> => 匹配<H1><H2><H3><H4><H5><H6>;
- [Jj]ack => 匹配jack或者Jack;
- [^aeiouAEIOU] => ^开头指否定,匹配非元音字符;
- [0-9][a-z][A-Z] => -(连杠)不在开头则指定左右边界之间的任意字符;
- [0-9a-zA-Z_] => 等同于\w;
- [^0-9a-zA-Z_] => 等同于\W;
转义:\
反义:^
3.2限定符
元字符一次只能匹配一个位置或者一个字符,用限定符来确定指定数量,放在后面;
常用限定符:
- {n} => 重复n次;
- {n,} => 至少重复n次;
- {n,m} => 重复至少n次,至多m次;
- * => 重复至少0次;
- + => 重复至少1次;
- ? => 重复0次或1次;
3.3字符的运算
替换:
| => 匹配 | 左侧或右侧,优先匹配左侧表达式;
\d{5} | \d{5}-\d{3}
源数据:12345 12345-678
匹配值:12345 12345(这一部分符合左边正则表达式,就不再看右边)
分组:
()小括号把正则表达式框起来可看做一个整体
(\d{1,3}\.){3}\d{1,3} => 可用于匹配简单的ip地址
反向引用:
直接用组号引用正则表达式
\b(\w)(\d)\1\2\b = \b\w\d\w\d\b
3.4优先级顺序
转义符>圆括号&方括号>限定符>位置和顺序>或运算