常用量词转义:
- * -> {0,}
- + -> {1,}
- ? -> {0,1}
- ?P<name> 分组名
- ?: 不记名分组
- | 或者方法
- ?= 条件为预搜索
- +? 非贪婪模式
- + 贪婪模式
- \A等于默认模式 ^
- \Z 等于默认模式的 $
- <num> 反向引用
^属性:
- 它只有紧跟着[的时候才是一个元字符,否则就需要转义
分组grouping:
- 如果用量词限定出现次数的元素不是字符或者字符组,而是几个字符甚至表达式,就应该用括号将它们分为一组。
- 捕获
- (exp) 匹配exp,并捕获文本到自动命名的组里
- (?<name>exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?name'exp)
- (?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号
- 零宽断言
- (?=exp) 匹配exp前面的位置
- (?<=exp) 匹配exp后面的位置
- (?!exp) 匹配后面跟的不是exp的位置
- (?<=exp) 匹配exp后面的位置
- (?!exp) 匹配后面跟的不是exp的位置
- (?<!exp) 匹配前面不是exp的位置
- 注释
- (?#commond)用于提供注释让人阅读
有穷自动机:
- Finite Automata 有穷自动机
- finite-state machine 有穷状态自动机
- 条件:
- 具有有限多个状态
- 有一套状态转移函数(或者叫“规则”)
- 有一个开始状态
- 有一个或者多个最终状态
DFA:Definite Finite Automata 确定型有穷自动机
NFA:Non-Definite Finite Automata 非确定型有穷自动机
正则表达式拒绝服务攻击(Regular Expreesion Denial of Service)
?=, ?! 环视功能
捕获型括号()
忽略优先量词+?, *?, ??...
解决常见问题是思路:
元素的逻辑:
- 必须出现
- 可能出现
- 不能出现
常见操作:
- 匹配、替换、切分