正则表达式定义:
Regular Experssion是强大、便捷高效的 文本处理工具。正则表达式本身,加上如同一本袖珍编程语言的通用模式表示法(general patten notation),赋予使用者描述和分析文本的能力,配合上特定工具提供的额外支持,正则表达式能够添加、删除、分离、叠加、插入和修整各类型的文本和数据。
正则表达式解决的实际问题:
- 多文件单词复杂条件查找。
- 文本过滤
- 条件匹配
检索文本工具Egrep:
- 使用范例:egrep '^(From|Subject):' mailbox-file:匹配邮件文件的开头是from,subject,date开头的行,目的是取到并生成一个邮件列表
- 邮件内容:mail-01.txt
From:link Subject:端午节祝福邮件 Date:2019-06-07 这里是邮件正文...
- 实际效果:
ZBMAC-7ac72269c:Documents link$ egrep '^(From|Subject|Date):' mail-01.txt From:link Subject:端午节祝福邮件 Date:2019-06-07 ZBMAC-7ac72269c:Documents link$
- 表达式解释:^脱字符,是正则表达式的元字符之一,表示匹配文本的开头。()限定表达式的作用范围。| 表示'或者'的意思。
元字符知识:
行的起始与结束:
- 在检查一行文本时,^代表一行的开始,$代表一行的结束。
- 读者最好养成按照字符来理解正则表达式的习惯:比如,^cat匹配的是以c作为一行的第一个字符,紧接着一个a紧接着一个t的文本。
字符组
- 匹配若干字符之一:[abc],表示可以匹配的是a,b,或者c。
- 例:'<H[123456]>'用来匹配<H1>、<H2>、<H3>至<H6>标签。
- 字符组元字符‘-’表示一个范围。上边的例子可以改为'<H[1-6]>',连字符作为开头时,不是元字符。
- [a-zA-z]同样是表示一个范围。注意:只有在字符组内,'-'才是元字符。
- 排除型字符组:[^...] ,当脱字符^在字符组内是,表示匹配字符组中未列出的字符。
匹配任意字符:
- '.'点,匹配任意字符。
- 但在字符组中,.不是元字符。注意:字符组的里边和外边,元字符的定义和意义是不一样的。
单词分界符:
- '\<'和'\>'
- 大于号小于号本身不是元字符,只有跟斜杠结合后才是元字符。
- 不是所有的版本egrep都支持该元字符。
元字符的总结:
匹配单个字符的元字符 |
||
. | 点号 | 匹配单个任意字符 |
[...] | 字符组 | 匹配单个列出的字符 |
[^...] | 排除型字符组 | 匹配单个未列出的字符 |
\char | 转义字符 | 如果char是元字符,或者转义序列无特殊含义时,匹配char对应的普通字符 |
提供计数功能的元字符 |
||
? | 问号 | 容许匹配一次,但非必须 |
* | 星号 | 可以匹配任意多次,也可能不匹配 |
+ | 加号 | 至少需要匹配一次,至多可能任意多次 |
{min,max} | 区间量词(非所有版本egrep都支持) | 至少需要min次,至多容许max次 |
匹配位置的字符 |
||
^ | 脱字符 | 匹配一行的开头位置 |
$ | 美元符 | 匹配一行的结束位置 |
\< | 单词分界符(非所有版本egrep都支持) | 匹配单子的开始位置 |
\> | 单词分界符(非所有版本egrep都支持) | 匹配单词的结束位置 |
其它元字符 | ||
| | alternation | 匹配任意分隔的表达式 |
(...) | 括号 | 限定多选结构的范围,标注量词作用的元素,为反向引用"捕获"文本。 |
\1,\2,... | 反向引用(非所有版本egrep都支持) | 匹配之前的第一、第二组括号内的字符表达式,匹配的文本 |
文章属于读《精通正则表达式》一书的笔记,写的相对比较粗略,书中描述的比较细致,整个入门就占用的一章的笔墨,但是对于没有一点基础的非常适合。这里列出了正则表达式的元字符,掌握了这些,应对常用的正则表达式的书写基本够用了。
比较受用的思想就是:注意正则表达式是以字符为单元的,所有的元字符限定权限都是作用于前一个字符或者表达式。
正则表达式术语汇总
正则:regex(regular expression)
匹配:matching
元字符:metacharacter
流派:flavor
子表达式:subexpression
字符:character