首页 > 编程笔记

正则表达式是什么?

现在越来越多的程序、文本编辑工具和编程语言都支持正则表达式,但任何语言都需要遵循一定的语法规则,正则表达式也不例外。

什么是正则表达式

在 Linux 系统中,可以使用正则表达式来过滤文本。Linux 工具能够在处理数据时使用正则表达式对数据进行模式匹配,如果数据能够匹配到模式,则它会被接受并进一步处理;如果数据不匹配模式,则它会被过滤掉。

简单来说,正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法,通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤、替换或输出需要的字符串。

Linux 正则表达式一般以行为单位进行处理,一次处理一行。使用正则表达式模式匹配数据的过程如图 1 所示。


图 1 使用正则表达式匹配数据过程

正则表达式模式利用通配符来描述数据流中的一个或多个字符,可以在正则表达式中使用不同的特殊字符来定义特定的数据过滤模式。

注意,正则表达式和通配符有着本质的区别:正则表达式主要用来查找文件内容、文本和字符串,最常应用正则表达式的命令是 grep(egrep)、sed 和 awk;而通配符主要用来查找文件名,普通命令都支持。

正则表达式的使用注意事项有以下几点:

正则表达式的分类

使用正则表达式的最大问题就是正则表达式的类型不止一种,在 Linux 系统中的不同应用程序可能会使用不同类型的正则表达式。

正则表达式是通过正则表达式引擎(regular expression engine)来实现的。在 Linux 系统中有两种常用的正则表达式引擎,根据 POSIX 规范将正则表达式分为以下两种:
大部分 Linux 工具都符合 POSIX BRE 引擎规范,能够识别该规范定义的所有模式符号。POSIX BRE 引擎通常出现在依赖正则表达式进行文本过滤的编程语言中,它为常见的模式提供了高级模式符号和特殊符号,如匹配数字、单词和按字母排序的字符等。

注意,gawk 程序使用 ERE 引擎来处理正则表达式模式。

基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符的不同:
这里先简单介绍一下基本正则表达式和扩展正则表达式,在后面将会详细讲解。

正则表达式的用途

在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的问题。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。

计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理时的最为强大的工具,绝大多数语言都提供了对正则表达式的支持。

正则表达式是对字符串操作的一种逻辑公式,就是用原先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”。这个“规则字符串”用来表达对字符串的一种过滤逻辑,给定一个正则表达式和另一个字符串,可以达到如下目的:
  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。
  2. 可以通过正则表达式从字符串中获取想要的特定部分。
  3. 测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
  4. 替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。

正则表达式的特点是:

优秀文章