《正则表达式必知必会》记录
正则表达式(Regular Expression)
由字符构成的字符串,用来匹配和处理文本,例如搜索和替换
术语
待匹配的内容称为文本,正则表达式称为模式(可能是搜索模式或替换模式),执行匹配后会产生结果。
匹配单个字符
- 匹配普通文本,且正则表达式区分大小写。例如:
Ben。 - 匹配任意字符:
. - 匹配特殊字符,需要使用转义字符:
\。例如:.用于匹配任意字符,如果需要匹配小数点使用\.。
匹配字符集合
- 匹配多个字符中的某一个:
[character set],字符之间是or的关系。例如:[123]用于匹配1,2,3中的任一字符。 - 利用字符集合区间:
[start-end]。例如:[0-9A-Za-z]匹配数字/大小写字母的任一字符。 - 排除字符集合制定的字符:
[^character set]。例如:[^0-9]匹配非数字。
使用元字符
- 匹配空白字符:
[\b], \f, \n, \r, \t, \v. - 匹配特定的字符类型:数字(
\d, \D), 字母数字(\w, \W), 空白字符(\s, \S), 匹配十六进制或八进制数值(\x, \0). 大写字符为小写字符的排除集合。
重复匹配
- 匹配一个或多个字符:
+ - 匹配零个或多个字符:
* - 匹配零个或一个字符:
? - 具体的重复匹配:
{n}。例如:{3} - 匹配区间:
{m,n}。例如:{1,3} - 匹配至少重复多少次:
{m,}。例如:{2,} - 量词是贪婪的,防止过度匹配,需要在贪婪型量词后加上
?.例如:.?, *?, {n,}?
位置匹配
- 边界(指定模式前后位置的特殊元字符)
- 单词边界:
\b用于匹配一个单词的开头或结尾。 - 字符串边界:
^代表字符串开头,$代表字符串结尾。 - 多行模式:
(?m), 使用时(?m)必须出现在整个模式的最前面。
子表达式(subexpression)
- 使用子表达式进行分组:
(),每个子表达式可以用\n引用,n从1开始计数。 - 子表达式支持嵌套。
反向引用(backreference)
- 反向引用匹配。子表达式对模式分组,将其标识出来以备后用。
- 替换操作,涉及到两个正则表达式,一个用来指定搜索模式(引用子表达式
\1),一个用来指定替换模式(引用子表达式$1)。 - 大小写替换:
\E, \l, \L, \u, \L
环视(lookaround, 向前lookahead, 向后lookbehind)
- 向前:
(?=),需要出现在子表达式里,后边跟要匹配的文本。 - 向后:
(?<=),需要出现在子表达式里,后边跟要匹配的文本。 - 结合向前向后查看。
- 否定式环视(negative lookaround):用
!替换=, 即否定向前:?!,否定向后:?<!.
嵌入式条件
- 正则表达式里的条件(
?匹配前一个字符表达式,?=和?<=匹配前面或后面的文本) - 反向引用条件。例如:
(?(1))检查第一个反向引用是否存在。 - 环视条件。例如:
(?(?=-)-\d{4})检查后边是否有-,如果有则继续匹配-和四个数字。
基本字符表快速索引
基本的元字符
| 元字符 | 说明 |
|---|---|
| . | 匹配任意单个字符 |
| | | 逻辑或操作符 |
| [] | 匹配该字符集合中的一个字符 |
| [^] | 排除该字符集合 |
| - | 定义一个范围(例如[A-Z]) |
| \ | 对下一个字符转义 |
量词元字符
| 元字符 | 说明 |
|---|---|
| * | 匹配前一个字符(子表达式)的零次或多次重复 |
| *? | *的懒惰型版本 |
| + | 匹配前一个字符(子表达式)的一次或多次重复 |
| +? | +的懒惰型版本 |
| ? | 匹配前一个字符(子表达式)的零次或一次重复 |
| {n} | 匹配前一个字符(子表达式)的n次重复 |
| {m,n} | 匹配前一个字符(子表达式)的至少m次至多n次重复 |
| {n,} | 匹配前一个字符(子表达式)的n次或更多次重复 |
| {n,}? | {n,}的懒惰型版本 |
位置元字符
| 元字符 | 说明 |
|---|---|
| ^ | 匹配字符串的开头 |
| \A | 匹配字符串的开头 |
| $ | 匹配字符串的结尾 |
| \Z | 匹配字符串的结尾 |
| \< | 匹配单词的开头 |
| \> | 匹配单词的结尾 |
| \b | 匹配单词边界(开头和结尾) |
| \B | \b的反义 |
匹配模式
| 元字符 | 说明 |
|---|---|
| (?m) | 多行模式 |
特殊字符元字符
| 元字符 | 说明 |
|---|---|
| [\b] | 退格字符 |
| \c | 匹配一个控制字符 |
| \d | 匹配任意数字字符 |
| \D | \d的反义 |
| \f | 换页符 |
| \n | 换行符 |
| \r | 回车符 |
| \s | 匹配任意空白字符 |
| \S | \s的反义 |
| \t | 制表符(Tab键) |
| \v | 垂直制表符 |
| \w | 匹配任意字母数字字符或下划线字符 |
| \W | \w的反义 |
| \x | 匹配一个十六进制数字 |
| \0 | 匹配一个八进制数字 |
反向引用和环视
| 元字符 | 说明 |
|---|---|
| () | 定义一个子表达式 |
| \1 | 匹配第一个子表达式;\2匹配第二个子表达式,以此类推 |
| ?= | 肯定式向前查看 |
| ?<= | 肯定式向后查看 |
| ?! | 否定式向前查看 |
| ?<! | 否定式向后查看 |
| ?() | 条件(if then) |
| ?()| | 条件(if then else) |
大小写转换
| 元字符 | 说明 |
|---|---|
| \E | 结束\L或\U转换 |
| \l | 把下一个字符转换为小写 |
| \L | 把后面的字符转换为小写,直到遇见\E为止 |
| \u | 把下一个字符转换为大写 |
| \U | 把后面的字符转换为大写,直到遇见\E为止 |
相关网站
- regex在线测试:regex101.com/
- regex学习网站:www.regular-expressions.info/quickstart.…