正则表达式是什么?
现在越来越多的程序、文本编辑工具和编程语言都支持正则表达式,但任何语言都需要遵循一定的语法规则,正则表达式也不例外。
简单来说,正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法,通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤、替换或输出需要的字符串。
Linux 正则表达式一般以行为单位进行处理,一次处理一行。使用正则表达式模式匹配数据的过程如图 1 所示。

图 1 使用正则表达式匹配数据过程
正则表达式模式利用通配符来描述数据流中的一个或多个字符,可以在正则表达式中使用不同的特殊字符来定义特定的数据过滤模式。
注意,正则表达式和通配符有着本质的区别:正则表达式主要用来查找文件内容、文本和字符串,最常应用正则表达式的命令是 grep(egrep)、sed 和 awk;而通配符主要用来查找文件名,普通命令都支持。
正则表达式的使用注意事项有以下几点:
正则表达式是通过正则表达式引擎(regular expression engine)来实现的。在 Linux 系统中有两种常用的正则表达式引擎,根据 POSIX 规范将正则表达式分为以下两种:
大部分 Linux 工具都符合 POSIX BRE 引擎规范,能够识别该规范定义的所有模式符号。POSIX BRE 引擎通常出现在依赖正则表达式进行文本过滤的编程语言中,它为常见的模式提供了高级模式符号和特殊符号,如匹配数字、单词和按字母排序的字符等。
计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理时的最为强大的工具,绝大多数语言都提供了对正则表达式的支持。
正则表达式是对字符串操作的一种逻辑公式,就是用原先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”。这个“规则字符串”用来表达对字符串的一种过滤逻辑,给定一个正则表达式和另一个字符串,可以达到如下目的:
正则表达式的特点是:
声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
什么是正则表达式
在 Linux 系统中,可以使用正则表达式来过滤文本。Linux 工具能够在处理数据时使用正则表达式对数据进行模式匹配,如果数据能够匹配到模式,则它会被接受并进一步处理;如果数据不匹配模式,则它会被过滤掉。简单来说,正则表达式就是为了处理大量的文本或字符串而定义的一套规则和方法,通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤、替换或输出需要的字符串。
Linux 正则表达式一般以行为单位进行处理,一次处理一行。使用正则表达式模式匹配数据的过程如图 1 所示。

图 1 使用正则表达式匹配数据过程
正则表达式模式利用通配符来描述数据流中的一个或多个字符,可以在正则表达式中使用不同的特殊字符来定义特定的数据过滤模式。
注意,正则表达式和通配符有着本质的区别:正则表达式主要用来查找文件内容、文本和字符串,最常应用正则表达式的命令是 grep(egrep)、sed 和 awk;而通配符主要用来查找文件名,普通命令都支持。
正则表达式的使用注意事项有以下几点:
- Linux 正则表达式以行为单位处理字符串。
- 为便于区别过滤出来的字符串,一定要和 grep(egrep)命令一起使用。
- 注意字符集。有少数特殊情况下,会出现正则失效的可能,多数情况下与字符集有关,所以需要加入“exportLC_All=C”。
正则表达式的分类
使用正则表达式的最大问题就是正则表达式的类型不止一种,在 Linux 系统中的不同应用程序可能会使用不同类型的正则表达式。正则表达式是通过正则表达式引擎(regular expression engine)来实现的。在 Linux 系统中有两种常用的正则表达式引擎,根据 POSIX 规范将正则表达式分为以下两种:
- 基本正则表达式(BRE,basic regular expression)引擎。
- 扩展正则表达式(ERE,extended regular expression)引擎。
大部分 Linux 工具都符合 POSIX BRE 引擎规范,能够识别该规范定义的所有模式符号。POSIX BRE 引擎通常出现在依赖正则表达式进行文本过滤的编程语言中,它为常见的模式提供了高级模式符号和特殊符号,如匹配数字、单词和按字母排序的字符等。
基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符的不同:注意,gawk 程序使用 ERE 引擎来处理正则表达式模式。
- 基本正则表达式(BRE)只承认的元字符有“^”“$”“.”“[]”“*”等,其他字符都识别为普通字符“\(\)”。
- 扩展正则表达式(ERE)则添加了“()”“{}”“?”“+”“|”等。
- 只有在使用反斜杠进行转义的情况下,字符“()”和“{}”才会在BRE中被当作元字符处理;而在 ERE 中,任何元符号前面加上反斜杠反而会使其被当作普通字符来处理。
这里先简单介绍一下基本正则表达式和扩展正则表达式,在后面将会详细讲解。
正则表达式的用途
在编写处理字符串的程序时,经常会有查找符合某些复杂规则的字符串的问题。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。计算机处理的信息更多的时候不是数值而是字符串,正则表达式就是在进行字符串匹配和处理时的最为强大的工具,绝大多数语言都提供了对正则表达式的支持。
正则表达式是对字符串操作的一种逻辑公式,就是用原先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”。这个“规则字符串”用来表达对字符串的一种过滤逻辑,给定一个正则表达式和另一个字符串,可以达到如下目的:
- 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。
- 可以通过正则表达式从字符串中获取想要的特定部分。
- 测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
- 替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
正则表达式的特点是:
- 有强大的灵活性、逻辑性和功能性。
- 可以迅速地用极简单的方式达到字符串的复杂控制。
声明:《Linux系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。