前言
正则表达式基本内容
一.字符集
正则表达式中预定义了一些字符集,字符集能以简洁的方式表示一些由元字符和普通字符表示的匹配规则。
以下是字符集,在字符集中都支持unicode之内的字符,因此在中英文中用[0-9]表示数字,[A-Za-z]表示字母比较准准确。
. 匹配除\n\r的任意一个字符
\d 匹配一个数字,约等价[0-9],范围更大
\D 匹配一个非数字
\w 匹配一个字母数字下划线的单词字符,约等价[A-Za-z0-9_],范围更大
\W 匹配一个非单词字符
\s 匹配一个不可见字符
\S 匹配一个可见字符
\b 匹配单词的边界,匹配位置
\B 匹配单词的非边界
二.限定符
* 对前面的表达式匹配任意次
+ 对前面的表达式匹配1次或多次
? 对前面的表达式匹配0次或一次
() 将之间的表达式定义为“组”(group),它们可以用 \1 到\9 的符号来引用。
(q)(w)\1\2 会匹配到qwqw
[] 匹配其中所包含的任一字符
{} 前面表达式的匹配次数
| 逻辑或运算
- 连字符,表示范围
^ 从字符串头部开始匹配
$ 从字符串结尾开始匹配
三.常用表达式
1.匹配位置
(pattern) 获取匹配的pattern值
下面四个都是非获取匹配,主要用来定位
(?=pattern) 正向肯定匹配 123(?=\.jpg) 指匹配.jpg之前的123
(?<=pattern) 反向肯定匹配 (?<=123)\.jpg 指匹配123后面的.jpg
(?!pattern) 正向否定匹配 123(?!\.jpg) 指不匹配.jpg之前的123
(?<!pattern) 反向否定匹配 (?<!123)\.jpg 指不匹配123后面的.jpg
2.分组引用
([A-Za-z])(\1) (\1)获取第一个分组的值 ,匹配两个连续相同的字母
([A-Za-z])([A-Za-z])(\1)(\2) ABAB类型字符
([\u4e00-\u9fa5])(\1)([\u4e00-\u9fa5])(\3) AABB型成语
3.非贪婪模式
+ * {}默认是贪婪模式,加上?就会转化为非贪婪模式