正则表达式基础知识
Basic篇
1、点 . : 匹配任何字符串除了换行符 /n
2、Character Sets [abc]:字符集
3、Negated Character Sets [^abc]:与上面一个的匹配方法相反,不匹配字符集内容
4、Letter Range[a-z],大小写敏感,包含第一个和最后一个
5、Number Range[0-9]:
Repetition(重复)篇
*号:放在字符后面,表示字符出现零次或多次
+号:放在字符后面,表示字符出现一次或多次
?号:放在字符后面,表示字符的出现是可选的
{}号:
1、放在字符后面,{n}表示出现具体几次
2、{n,},加个,表示n次及以上
3、{ , },在前后两个空里填上的数字表示字符出现的次数范围,{2,4}表示字符个数为2到4个
Grouping(分组)篇
()号:分组,并捕获该分组匹配到的文本
分组也可以不使用圆括号,而是使用 | 元字符来表示分组,| 的两侧是两个分组,例如, exp1 | exp2 表示两个分组
引用分组: The first group is used by writing \1 to avoid rewriting. Here 1 denotes the order of grouping.
(?:)号:分组,但不捕获该分组匹配到的文本
注:什么是捕获呢?使用小括号指定一个子表达式后,子表达式匹配的文本(即匹配的内容)可以在其他子表达式中重复使用
举个例子,下面是两组。但是,我们用\1表示的第一个组引用实际上指向第二个组,因为第一个组是未捕获的组。
ha-ha,haa-haa
(?:ha)-ha,(haa)-\1
特定符号篇
|:管道符
:转义符
^:前缀符 用[0-9]来查找,要仅查找行首的数字,请在此表达式前加上^符号
$:美元符号 查找行尾的符合条件的内容
\w 用于查找字母,数字,和下划线
\W 用于查找除字母,数字和下划线以外的内容
\d 只用来查找数字
\D 查找数字以外的字符
\s 只用来查找空格字符
\S 查找非空格字符
lookaround篇
1、(?=pattern) 正向先行断言
the positive look-ahead expression (?=)
afterour expression
代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配 pattern。
例如对 “a regular expression” 这个字符串,要想匹配 regular 中的 re,但不能匹配 expression 中的 re,可以用 re(?=gular),该表达式限定了 re 右边的位置,这个位置之后是 gular,但并不消耗 gular 这些字符
2、(?!pattern) 负向先行断言
the negative look-ahead (?!) expression
after our expression
代表字符串中的一个位置,紧接该位置之后的字符序列不能匹配 pattern。
3、(?<=pattern) 正向后行断言
the positive lookbehind expression (?<=)
beforeour expression.
代表字符串中的一个位置,紧接该位置之前的字符序列能够匹配 pattern。
例如对 regex represents regular expression 这个字符串,有 4 个单词,要想匹配单词内部的 re,但不匹配单词开头的 re,可以用 (?<=\w)re,单词内部的 re,在 re 前面应该是一个单词字符。
4、(?<!pattern) 负向后行断言
the negative lookbehind (?<!)
beforeour expression.
修饰符篇 Flags
Flags change the output of the expression. That’s why flags are also called modifiers
.
1、Global Flag
g 修饰符可以查找字符串中所有的匹配项
2、Multiline Flag
m 修饰符可以使 ^ 和 $ 匹配一段文本中每行的开始和结束位置。
g 只匹配第一行,添加 m 之后实现多行
3、Case-insensitive Flag
i 修饰符为不区分大小写匹配
4、s 修饰符
默认情况下的圆点 . 是 匹配除换行符 \n 之外的任何字符,加上 s 之后, . 中包含换行符 \n
贪婪与非贪婪篇
1、Greedy Matching贪婪匹配
匹配最长的符合条件的字符串
2、Lazy Matching非贪婪匹配
遇到合适的匹配即停止