正则表达式

Posted huahuahu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

正则表达式是你所定义的模式模板(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})

以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式