学习以及练习网站: regexlearn.com/learn/regex…
基础匹配
- 普通字符,直接写。例如
apple - 任意字符(包括空格)
.
字符集
- 一组字符中的任意一个
[abc] - 排除一组字符中的任意一个
[^abc]
范围
- 字母范围,大小写敏感
[e-o] - 数字范围
[4-7]
重复
- 匹配0次或多次
* - 匹配1次或多次
+ - 匹配0次或1次
?
出现次数
- 特定次数
{n} - 至少几次
{n,} - n-m之间的次数
{n,m}
分组
- 匹配一串字符
(abc) - 引用组\n ,n指的是第n个分组
(ha)-\1,(haa)-\2可以匹配“ha-ha,haa-haa” - 非捕获组 (?:),不计入引用组。 (?:ha)-ha,(haa)-\1 ,最后的数字是1,因为第一个组(?:ha)非捕获
管道符|
- 匹配多个表达式,区别于字符集
[abc]是字符层面的,|是表达式层面的,例如(c|r)at|dog可以匹配 cat rat dog
转义字符
- 正则表达式中的特殊字符:
{ } [ ] / \ + * . $^ | ?,想匹配这些字符时需要添加转义字符\
开头和结尾 ^
22.^ ^[0-9] 匹配以数字开头
23.$ [0-9]$ 匹配以数字结尾
特殊表达式
\w字母,数字和下划线\W除了字母,数字和下划线\d数字\D除了数字\s空格\S非空格
Lookarounds 在表达式后加限定条件
- Positive Lookahead
(?=)
限定要匹配的内容后边必须有某个表达式,例如:找到PM之前的数字3 Date: 4 Aug 3PM\d+(?=PM) - Negative Lookahead
(?!)
限定要匹配的内容后边必须没有某个表达式,例如:找到除了PM之前的数字4\d+(?!PM) - Positive Lookbehind##
(?<=)
限定要匹配的内容前边必须有某个表达式,运算符要写在表达式前边。例如: 找到价格数字 "Product Code: 1064 Price: $5" :
(?<=\$)\d+
34.Negative Lookbehind(?<!)
限定要匹配的内容前边必须没有某个表达式,例如: 找到除了价格的数字 (?<!\$)\d+
Flags(modifiers) 修饰符
g: global 全局匹配,查找目标中所有的匹配m: muiltiline 多行匹配,正则默认将目标字符串视为单行,m可以将多行字符串视为独立的行。i: case insensitive 大小写不敏感
Greedy Matching 贪婪匹配
-
正则默认贪婪匹配,尽可能找到满足规则的更长的字符串
-
非贪婪匹配,找到第一个匹配就停止。例如:ber beer beeer beeeer ,匹配第一个r前的单词
.*r会匹配到 ber beer beeer beeeer ,.*?r会匹配到ber。