初探正则表达式
表达特定模式字符串的终极武器
对于字符串的处理,大多会涉及到「字符串模式」的问题。这个模式可以是十分具体的某一个特定子字符串,也可以是某一类可以明确表达出来的「子字符串集」。这些都是模式,而我们可以使用正则表达式的三种自然、简单却强大的操作组合来描述模式:
- 连接操作:由若干个字符连接起来的模式
- 或操作:指定多种可能进行组合,连接操作优先级高于或操作
- 闭包操作:将模式的某一部分重复任意次数,闭包操作优先级高于连接操作
- 括号:使用括号来改变默认的优先级顺序
- 缩略写法
- 字符集描述符
- 通配符 .
- 指定集合: 包含在[]中
- 范围集合: 包含在[]中,用 - 分割
- 补集:包含在[]中,首字母为 ^
- 闭包缩写
- 至少重复一次: +
- 重复 0 次或 1 次: ?
- 重复指定次数:由 {num} 指定
- 重复指定范围的次数:由 {num1-num2} 指定
- 转移序列
- 某些字符,是被用来构造表达式的元字符。用反斜杠加元字符表示字符的本义
- 字符集描述符
- 位置匹配
- 英文中常用的单词前后是否有空格用 \b 来表示空格,b 替换为 B 时表示非空格
- ^ 放在表达式开头,表示目标模式的开头
- $ 放在表达式末尾,表示目标模式的末尾
- (?m) 表示多行匹配,此时 ^ 和 $ 代表行首和行尾
正则表达式的实际应用
- 子字符串查找:搜索某种模式
- 合法性检查:查看模式是否匹配
- 程序员的工具箱:grep,程序员的无价之宝
- 基因组:寻找基因
- 搜索:搜索引擎都支持部分常见正则表达语句的搜索
- 正则表达式的可能性:正则表达式可以实现取余操作!
- 局限:并不是所有的语言都能用正则表达式定义
- 无法描述所有合法正则表达式字符串的集合
- 无法利用正则表达式检查括号是否匹配完整
- 无法检查字符串中 A 和 B 的数量是否一样多
- 探索这些局限帮助我们理解计算的本质起到了重要的作用
不知是该恭喜,还是该怎样,总之阅读到该文的,你是第 人。每一次刷新,都是不同的自己。