Linux 入门详解 23

95 阅读2分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

正则表达式

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为 regex、regexp 或 RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由 UNIX 中的工具软件(例如sedgrep)普及开的。正则表达式通常缩写成“regex”,单数有 regexp、regex,复数有 regexps、regexes、regexen。

简单的说形式和功能上正则表达式和我们前面讲的通配符很像,不过它们之间又有很大差别,特别在于一些特殊的匹配字符的含义上,希望初学者注意不要将两者弄混淆。

假设我们有这样一个文本文件,包含 nutprince 和 nutprincess 这两个字符串,同样一个表达式:

nut*

如果这作为一个正则表达式,它将只能匹配 shi,而如果不是作为正则表达式 * 作为一个通配符,则将同时匹配这两个字符串。这是为什么呢?因为在正则表达式中 * 表示匹配前面的子表达式(这里就是它前面一个字符)零次或多次。

一个正则表达式通常被称为一个模式(pattern),为用来描述或者匹配一系列符合某个句法规则的字符串。

选择

| 竖直分隔符表示选择,例如 boy|girl 可以匹配 boy 或者 girl

数量限定

数量限定除了我们举例用的 * 还有 + 加号 ? 问号,如果在一个模式中不加数量限定符则表示出现一次且仅出现一次:

  • + 表示前面的字符必须出现至少一次(1 次或多次),例如 goo+gle 可以匹配 goooglegoooogle 等;
  • ? 表示前面的字符最多出现一次(0 次或 1 次),例如,colou?r,可以匹配 color 或者 colour;
  • * 星号代表前面的字符可以不出现,也可以出现一次或者多次(0 次、或 1 次、或多次),例如,0*42 可以匹配 42、042、0042、00042 等。