正则表达式
正则表达式是你所定义的模式模板(pattern template), Linux可以利用它来过滤文本。
正则表达式类型
正则表达式是通过正则表达式引擎实现的。正则表达式引擎是一套底层软件,复杂解释正则表达式并使用这些模式进行文本匹配。
在Linux中,有两种流行的正则表达式引擎。
- POSIX基础正则表达式(basic regular expression, BRE)引擎
- POSIX扩展正则表达式(extended regular expression)引擎
定义BRE模式
特殊字符
.*[]^${}\+?|()
锚字符
- 锁定在行首
^
指定从数据流中文本行的行首开始模式。如果模式出现在行首之外的位置,正则表达式无法匹配。  如果将脱字符放在模式开头之外的其他位置,那么它就跟普通字符一样,不是特殊字符了 - 锁定在行尾
$
定义了行尾锚点。  - 组合锚点
^$
指定了空行。
点号字符
点号用来匹配除换行符以外任意单个字符。

字符组(character class)
用来限定待匹配的具体字符。

排除型字符组
寻找组中没有的字符。只要在字符组的开头加个脱字符^
.

即使是排除,字符组仍必须匹配一个字符。
区间
可以在单破折线符号在字符组中表示字符区间。只需要指定区间的第一个字符、单破折线以及区间的最后一个字符就行了。

特殊字符组

星号
字符后放置星号表示该字符必须在匹配模式的文本中出现0次或多次。

扩展正则表达式
问号
类似星号,不过前面的字符可以出现0次或1次,单仅限于此。

加号
表示前面的字符可以出现1次或多次,但必须出现一次。

花括号
为可重复的正则表达式指定一个上限。这通常称为间隔(interval)。可以用两种格式来指定区间。
- m: 正则表达式准确出现m次。
- m, n: 正则表达式至少出现m次,至多n次。

管道符号|
管道符号允许在检查数据时,用逻辑OR的方式指定正则表达式引擎要用的两个或多个模式。如果任何一个模式匹配了数据流文本,文本就通过测试。如果没有模式匹配,则数据流文本匹配失败。
表达式分组
可以用圆括号进行分组。当将正则表达式模式分组时,该组会被视为一个标准字符。可以像对普通字符一样给该组使用特殊字符。

实战-解析邮件地址
基本格式: username@hostname
username可用字母数字字符以及以下特殊字符
- 点号
- 单破折线
- 加号
- 下划线
hostname
由一个或多个域名和一个服务器名组成。域名和服务器名只允许字母数字字符和点号、下划线
从左往右开始构建正则表达式
1. 用户名可以有多个有效字符。
^([a-zA-Z0-9_\-\.\+]+)@
2. hostname
([a-zA-Z0-9_\-\.])
3. 顶级域名
\.([a-zA-Z]{2,5})
组合起来就是
^([a-zA-Z0-9_\-\.\+]+)@([a-zA-Z0-9_\-\.])\.([a-zA-Z]{2,5})