企业路由器 ER-AS_Path列表概述:AS_Path正则表达式说明

时间:2024-10-23 15:35:04

AS_Path正则表达式说明

AS_Path规则过滤的核心内容就是正则表达式。关于正则表达式的内容较为复杂,这里仅讨论一些跟AS_Path过滤器相关的内容。

AS_Path规则使用正则表达式来定义匹配规则。正则表达式由元字符和字符两部分组成:

  • 元字符定义了匹配的规则
  • 字符定义了匹配的对象

BGP AS_Path支持的元字符及正则表达式配置示例如表1所示。

表1 AS_Path正则表达式

元字符

含义

示例

.

匹配除“\n”之外任何单个字符,包括空格。

.*表示匹配任意字符串,即AS_Path为任意,可以用来匹配所有路由。

说明:

在一个AS_Path列表中创建了一个或多个拒绝模式的AS_Path规则后,需要创建一个.*规则,来允许所有其他路由通过。

*

之前的字符在目标对象中出现0次或连续多次。

参考上例。

+

之前的字符在目标对象中出现1次或连续多次。

65+表示6在AS_Path的首位,而5在AS_Path中出现一次或多次,那么:
  • 以下字符串都符合这个特征:65,655,6559,65259,65529等。
  • 以下字符串不符合这个特征:56,556,5669,55269,56259等。

|

竖线左边和右边的字符为“或”的关系。

100|65002|65003表示匹配100、65002或65003。

以下字符串均符合这个特征,包含其中任意一个字符即可:
  • 100,655,6559
  • 65,655,65002
  • 65,65003,100

^

之后的字符串必须出现在目标对象的开始。

^65表示匹配以65开头的字符串,那么:
  • 以下字符串都符合这个特征:65,651,6501,65001等。
  • 以下字符串不符合这个特征:165,1650,6650,60065等。

$

之前的字符串必须出现在目标对象的结束。

65$表示匹配以65结尾的字符串,那么:
  • 以下字符串都符合这个特征:65,165,1065,10065,60065等。
  • 以下字符串不符合这个特征:651,1650,6650,60650,65001等。
说明:

^$表示匹配空字符串,即AS_Path为空,通常用来匹配本地始发路由。

( )

一对圆括号内的正则表达式作为一个子正则表达式,匹配子表达式并获取这一匹配。

100(200)+表示100在AS_Path的首位,而200在AS_Path中出现一次或多次,那么

以下字符串都符合这个特征:
  • 100200
  • 100200200
  • 100200200200

[ ]

匹配方括号内的任意字符或指定范围内的任意字符。

  • [896]表示匹配含有8、9或6中任意一个字符。
  • [2-4]表示匹配2,3,4的任意字符。
  • [0-9]表示匹配数字0~9的任意字符。
说明:

方括号内“[ ]”只能填写数字0到9。例如,如果需要匹配735~907,则需要写成(73[5-9]|7[4-9][0-9]|8[0-9][0-9]|90[0-7])。

[^ ]

匹配除了方扩号内列出的字符外的任意字符或不在指定范围内的任意字符。

  • [^2-4]表示匹配除2,3,4外的其他字符。
  • [^0-9]表示匹配除数字0~9外的其他字符。
  • [^896]表示匹配含有8、9或6这几个字符之外的任意一个字符。

_

匹配一个符号,包括逗号、左大括号、右大括号、左括号、右括号和空格,在表达式的开头或结尾时还可作起始符、结束符(同^ ,$)。

  • ^65001_表示匹配字符串的开始为65001,字符串的后面为符号,也即AS_Path最左边AS(最后一个AS)为65001,可以用来匹配AS 65001邻居发送的路由,
  • _65001_表示匹配字符串里有65001,即AS_Path中有65001,可以用来匹配经过AS 65001的路由。
  • _65001$表示匹配字符串的最后为65001,字符串前面是符号,即AS_Path最右边AS(第一个AS)为65001,可以用来匹配AS 65001始发的路由。

\

转义字符。

AS_Confed_Sequence是用“(” 、“)”表示的,“(” 、“)”在正则表达式中是特殊字符,有特殊用处,所以对于这种特殊字符,可以使用“\”来去除其特殊意义进行匹配。例如:

  • \(65002_表示匹配字符串为(65002,字符串的后面为符号,也即AS_Confed_Sequence最左边AS(最后一个AS)为65002,可以用来匹配AS 65002邻居发送的路由。
  • \(.*_65003_.*\) 表示AS_Confed_Sequence中间有65003,可以用来匹配经过AS 65003的路由。
  • _65004\)表示匹配字符串最后为65004),字符串的前面为符号,也即AS_Confed_Sequence最右边AS(第一个AS)为65004,可以用来匹配AS 65004始发的路由,还可以用来匹配AS 65004直接发布的路由。

同理,AS_Confed_Set使用的“[”、“]”,AS_Set使用的“{”、“}”也都可以使用“\”符号来去除这些特殊符号的特殊意义。

support.huaweicloud.com/usermanual-er/rc_01_0024.html