首页 > 代码库 > 正则表达式

正则表达式

正则表达式是你所定义的模式模板(pattern template), Linux可以利用它来过滤文本。

正则表达式类型

正则表达式是通过正则表达式引擎实现的。正则表达式引擎是一套底层软件,复杂解释正则表达式并使用这些模式进行文本匹配。

在Linux中,有两种流行的正则表达式引擎。
- POSIX基础正则表达式(basic regular expression, BRE)引擎
- POSIX扩展正则表达式(extended regular expression)引擎

定义BRE模式

特殊字符

.*[]^${}\+?|()

锚字符

  1. 锁定在行首
    ^指定从数据流中文本行的行首开始模式。如果模式出现在行首之外的位置,正则表达式无法匹配。 技术分享? 如果将脱字符放在模式开头之外的其他位置,那么它就跟普通字符一样,不是特殊字符了
  2. 锁定在行尾
    $定义了行尾锚点。 技术分享?
  3. 组合锚点
    ^$指定了空行。

点号字符

点号用来匹配除换行符以外任意单个字符。
技术分享?

字符组(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})

正则表达式