正则表达式是一种模式匹配工具,用户可根据一定的规则构建匹配模式,然后将匹配模式与目标对象进行匹配。
正则表达式描述了一种字符串匹配的模式,由普通字符(例如字符a到z)和特殊字符(或称“元字符”)组成。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
检查字符串中符合某个规则的子字符串,并可以获取该子字符串。
根据匹配规则对字符串进行替换操作。
正则表达式由普通字符和特殊字符组成。
普通字符
普通字符匹配的对象是普通字符本身。包括所有的大写和小写字母、数字、下划线、标点符号以及一些特殊符号。例如:a匹配abc中的a,192匹配192.168.1.1中的192,@匹配xxx@xxx.com中的@。
特殊字符
特殊字符配合普通字符匹配复杂或特殊的字符串组合。表1是对特殊字符及其语法意义的使用描述。
特殊字符 |
功能 |
举例 |
|---|---|---|
\ |
转义字符。将下一个字符(特殊字符或者普通字符)标记为普通字符。 |
\*匹配* |
^ |
匹配行首的位置。 |
^10匹配10.10.10.1,不匹配1.10.10.1 |
$ |
匹配行尾的位置。 |
1$匹配10.10.10.1,不匹配10.10.10.2 |
* |
匹配前面的子正则表达式零次或多次。 |
10*可以匹配1、10、100、1000、…… (10)*可以匹配空、10、1010、101010、…… |
+ |
匹配前面的子正则表达式一次或多次。 |
10+可以匹配10、100、1000、…… (10)+可以匹配10、1010、101010、…… |
? |
匹配前面的子正则表达式零次或一次。 说明:
当前,在华为公司数据通信设备上运用正则表达式输入?时,系统显示为命令行帮助功能。华为公司数据通信设备不支持正则表达式输入?特殊字符。 |
10?可以匹配1或者10 (10)?可以匹配空或者10 |
. |
匹配任意单个字符。 |
0.0可以匹配0x0、020、…… .oo.可以匹配book、look、tool、…… |
() |
一对圆括号内的正则表达式作为一个子正则表达式,匹配子表达式并获取这一匹配。圆括号内也可以为空。 |
100(200)+可以匹配100200、100200200、…… |
x|y |
匹配x或y。 |
100|200匹配100或者200 1(2|3)4匹配124或者134,而不匹配1234、14、1224、1334 |
[xyz] |
匹配正则表达式中包含的任意一个字符。 |
[123]匹配255中的2 |
[^xyz] |
匹配正则表达式中未包含的字符。 |
[^123]匹配除123之外的任何字符 |
[a-z] |
匹配正则表达式指定范围内的任意字符。 |
[0-9]匹配0到9之间的所有数字 |
[^a-z] |
匹配正则表达式指定范围外的任意字符。 |
[^0-9]匹配所有非数字字符 |
_ |
匹配一个逗号(,)、左花括号({)、右花括号(})、左圆括号、右圆括号。 匹配输入字符串的开始位置。 匹配输入字符串的结束位置。 匹配一个空格。 |
_2008_可以匹配2008、空格2008空格、空格2008、2008空格、,2008,、{2008}、(2008)、{2008、(2008} |
除非特别说明,上表中涉及到的字符指的是可以打印的字符。
特殊字符的退化
某些特殊字符如果处在如下的正则表达式的特殊位置时,会引起退化,成为普通字符。
特殊字符处在转义符号‘\’之后,则发生转义,变为匹配该字符本身。
特殊字符“*”、“+”、“?”,处于正则表达式的第一个字符位置。例如:+45匹配+45,abc(*def)匹配abc*def。
特殊字符“^”,不在正则表达式的第一个字符位置。例如:abc^匹配abc^。
特殊字符“$”,不在正则表达式的最后一个字符位置。例如:12$2匹配12$2。
右括号“)”或者“]”没有对应的左括号“(”或“[”。例:abc)匹配abc),0-9]匹配0-9]。
除非特别说明,以上正则表达式包括括号“()”内包含的子正则表达式。
普通字符与特殊字符的组合使用
实际应用中,往往不是一个普通字符加上一个特殊字符配合使用,而是由多个普通字符和特殊字符组合,匹配某些特征的字符串。
VRP采用正则表达式实现管道符的过滤功能。并非所有display命令均支持管道符。当显示信息内容很多时,此display命令支持管道符;当显示信息内容很少时,此display命令不支持管道符。
按过滤条件进行查询时,显示内容的第一行信息中,以包含该字符串的整条信息作为起始,而非过滤字符串作为起始。
系统支持使用| count,显示使用过滤条件后输出的结果的行数。可以与过滤方式配合使用。
在支持正则表达式的命令中,有三种过滤方式可供选择:
| begin regular-expression:输出以匹配指定正则表达式的行开始的所有行。
| exclude regular-expression:输出不匹配指定正则表达式的所有行。
| include regular-expression:只输出匹配指定正则表达式的所有行。
regular-expression为字符串形式(不包括中文),长度范围是1~255。
before before-line-number:输出符合过滤规则的行和其前面before-line-number行的数据信息。
after after-line-number:输出符合过滤规则的行和其后面after-line-number行的数据信息。
before-line-number和after-line-number参数均为整数形式,取值范围是1~999。