清科谷体的博客

  • 文章
  • 关于
  • 联系
  • 隐私政策

  1. 首页
  2. 学习心得
  3. 正文

正则表达式的本质是什么——算法第四版笔记

2023年10月11日 378点热度 0人点赞 0条评论

正则表达式其实就是字符串的模式匹配,就是一般化的子字符串查找过程。使用正则表达式的目的即是在一长串文本中寻找指定的模式文本。

模式(pattern)这个词在字符串查找中有特别的指代,指要查找的子字符串。

基本操作

正则表达式关于模式文本的描述中,有三种基本操作。任何复杂的表达式都是通过这三种基本操作组成的。

连接操作 :紧密相连的字符串就是连接操作,比如 AB ABCD 匹配的字符串就是{"AB"}和{"ABCD"}

或操作 :指定多种可能的匹配,用符号|表达,比如A|B匹配 {"A","B"} A|E|I|O|U 匹配 {"A","E","I","O","U"}

闭包操作:闭包指将模式和自身连接任意多次(包括零次),用符号*表达,比如AB*指一个A和任意个B组成的模式,A*B指任意个A和一个B组成的模式。

优先级

优先级:闭包 > 连接 > 或

可以使用括号()改变默认的优先级顺序。

(AB)* 指由AB连接任意次的模式

(A|B)(C|D) 指 {"AC","AD","BC","BD"}

缩略写法

新引入一些额外的规则,这些都是三种基本操作的衍生。

字符集描述符

用一个或几个字符表示一个字符集会很方便。

通配符,能够表示任意一个字符, 用. 表示。比如A.B表示A开头B结束的任意三位的模式串。

指定集合,包含在 [] 中,[AEIOU] 表示由任意个元音大写字母组成的的模式。

范围集合,包含在 [] 中,用 - 分隔。比如[A-Z]表示由任意个大写字母组成的模式,[0-9]表示由任意个数字组成的模式。

补集,包含在 [] 中,首字母为 ^ 。比如[^AEIOU] 表示由任意个辅音大写字母组成的的模式。

闭包的简写

闭包指将模式自身复制任意多次,可以灵活的指定重复次数和范围。

+ 表示至少复制一次,(AB)+ 的原始写法是(AB)(AB)*

? 表示重复0次或者1次,(AB)? 的原始写法是 ε|AB。(ε是空字符串,所有字符串都包含ε)

{} 表示确定的重复次数,或者指定重复次数的范围,(AB){3} 的原始写法是(AB)(AB)(AB),(AB){1-2} 的原始写法是 (AB)|(AB)(AB)

转义字符

像是 \ . | * ( ) 这些字符是用来构造正则表达式的元字符。使用\开头的转义字符将元字符和普通字符区分开。

\\ 表示 \ 本身,还有一些其他的转义字符,\t 表示一个制表符,\n 表示一个换行符, \s 表示一个任意空白字符。

延申和拓展

正则表达式模式匹配的起源是Unix的命令grep,这个命令会打印出和给定正则表达式匹配的所有输入行。

现在,正则表达式也内置于许多编程语言和文本处理工具中,如 JavaScript、Python、Java、Perl 等。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 字符串 模式匹配 正则表达式 笔记
最后更新:2024年9月6日

ingker

自娱自乐

点赞
< 上一篇

文章评论

取消回复

COPYRIGHT © 2025 清科谷体's blog. ALL RIGHTS RESERVED.
THEME KRATOS MADE BY VTROIS | MODIFIED BY INGKER

正在加载今日诗词....

本站已运行