【原创】正则表达式基础知识速学笔记

0. 前言

正则表达式理解起来很多时候没有规律可言,因此本文将正则方面的知识总结为死记部分理解部分。其中死记部分内容较少,大家不用追求理解,只管硬背住就行。理解部分内容较多,大家结合理解进行记忆。

1. 死记部分

1.1 特殊字符:

+:代表前面的字符必须至少出现一次(1次或多次)
*:代表字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)
?:问号代表前面的字符最多只可以出现一次(0次、或1次)

():标记一个子表达式的开始和结束位置
[]: 标记一个范围表达式,
{}:标记限定符表达式,作用同+ * ?,限定前面字符出现次数

^:匹配输入字符串的开始位置
$:匹配输入字符串的结尾位置

.:匹配除换行符 \n 之外的任何单字符

|:指明两项之间的一个选择

要匹配特殊字符需要使用 \ 转义

2. 理解部分

正则表达式一般由三个部分组成,即:

位置+范围+数量+位置

  • 位置:指正则表达式从被匹配对象的什么地方开始匹配和什么地方结束匹配,不可省略,但可以只指定一个位置。
  • 范围:指正则表达式需要查找匹配的字符范围。不可省略。
  • 数量:指前面范围内的匹配需要匹配几次,可省略,省略则表明只匹配一次。

2.1 数量:限定符表达式

{n}:n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,}:n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
{n,m}:m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。

2.2 数量:最小匹配与最大匹配

*+ 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。

对字符串 “a123z456z” 进行匹配
/a.*z/贪婪:匹配从最开始的 a 到最后的 z 之间的所有内容:
a123z456z
/a.*?z/非贪婪:只匹配开始的 a 到第一个 z 之间的所有内容:
a123z456z

2.3 位置:定位符

定位符用来描述字符串或单词的边界,^$ 分别指字符串的开始与结束,\b 描述单词的前或后边界,\B 表示非单词边界。

对 “Chapter aAbB” 中的单词 ''Chapter" 进行匹配
/\bCha/:在单词的开始处查找匹配项
/ter\b/:在单词的结尾处查找匹配项
/\Bapt/:匹配 Chapter 中的字符串 apt,但不匹配 aptitude 中的字符串 apt

2.4 范围:普通字符

正则提供一个元字符中括号 []来表示区间条件。
限定0到9 可以写成[0-9]
限定A-Z 写成[A-Z]
限定某些数字 [165]

普通字符是指字母、数字、标点,以及不可见字符(如\n,\r,\t等)
\d:任意单个数字,等价于 [0-9]
\D:任意单个非数字,等价于 [^0-9]
\s:任意单个空白符,等价于[ \f\n\r\t\v]
\S:任意单个非空白符,等价于[^A-Za-z0-9_]
\w:任意单个字母数字和_,等价于[A-Za-z0-9_]\w有可能匹配到非英文字符,详见正则表达式\w并不完全等于[A-Za-z0-9])
\W:任意单个非字母数字和_,等价于[^A-Za-z0-9_]

[:alnum:]:任意单个字母或数字,等价于[A-Za-z0-9]
[:alpha:]:任意单字母,等价于[A-Za-z]
[:digit:]:任意单个数字,等价于[0-9]
[:lower:]:任意单个小写字母,等价于[a-z]
[:upper:]:任意单个大写字母,等价于[A-Z]
[:space:]:任意单个空白字符:制表符、空格

2.5 不同版本的正则

正则表达式分类:

  1. 基本的正则表达式(Basic Regular Expression 又叫 Basic RegEx 简称 BREs)
  2. 扩展的正则表达式(Extended Regular Expression 又叫 Extended RegEx 简称 EREs)
  3. Perl 的正则表达式(Perl Regular Expression 又叫 Perl RegEx 简称 PREs

不同命令和不同编程语言中使用的正则表达式很可能不是同一类,其中使用较多的是扩展正则表达式和 Perl 正则表达式。
此外,Linux 系统命令主要使用扩展正则,而 Python 使用 Perl 正则,因此这两者的正则表达式有时候不通用。
详细区别可见:linux shell 正则表达式(BREs,EREs,PREs)差异比较

注意:
sed:支持基本正则。sed -r:支持扩展正则。
grep:支持基本正则。egrep / grep -E:支持扩展正则。egrep -P / grep -P:支持 Perl 正则。
awk:支持扩展正则。

由于基本正则与另外两种正则的写法差异较大,建议避免使用基本正则表达式。

扩展正则和 Perl 正则简略区别如下:
扩展正则仅支持:\w,\W,不支持:\d,\D,\s,\S,\t,\n,\r等。

3. 参考链接

正则表达式 - 教程

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值