正则表达式本身只是一个文本的匹配工具,大量使用在软件编程中,可以简化代码。而在BGP中的as-path中也会使用到正则表达式。首先需要明确的是,正则表达式就只是一个文本匹配工具,它的处理对象就是文本,也就是说它要去匹配的对象于它而言就是纯文本,而不管你是在BGP还是在软件编程中应用它。as-path过滤的过程是,系统截取BGP路由中的as-path的内容(包括两个AS号之间的空格)作为输入文本,以相应正则表达式进行过滤。这个过程的理解在我们制作as-path列表的时候很有指导作用。正则表达式的运算顺序是从左往右的。
既然正则表达式是一个文本匹配工具,那千万别忘了平常在很多场合中是可以方便使用的,如在UltraEdit中进行文本查找,在设备上操作时使用管道符匹配输出时。
在设备上过滤显示的路由时还有专门的通过as-path过滤的命令:
show route protocol bgp  aspath-regex "4134.*|()"      *******JUNOS中;
    show ip bgp regexp "4134.*|()"                      *******IOSJUNOSe中;
 
一、正则表达式常用符号
符号
说明
示例
As-path列举
^
匹配一个字符串的开始。
^12
12
12 112 34 4512 ……;
$
匹配一个字符串的结束。
12$
12
1 1234 45 12;…… 12
{m}
匹配前面的表达式,出现m次。
12{3}
12 12 12
{m,}
匹配前面的表达式,至少出现m次。
12{3,}
12 12 12
12 12 12 1212 12 12 12 ……;
{m,n}
匹配前面的表达式,至少出现m次,至多出现n次。
12{1,2}
12
12 12
*
匹配前面的表达式,出现任意次。等效于{0,}
12*
Null
12
12 1212 12 1212 12 ……;
+
匹配前面的表达式,至少出现1次。等效于{1,}
12+
12
12 1212 12 1212 12 ……;
匹配前面的表达式,出现0次或者1次。    等效于{0,1}
12?
Null
12
.
代表除换行符以外的任意单个非空字符。
.12
34 12
56 1278 12;……12
( )
标记一个子表达式的开始和结束位置
. (56|78)
34 56
34 78;……;
!
逻辑非
 
 
|
逻辑或
12|34
12
34
[ ]
匹配的一个范围中任意一个AS,通常和“-”一起使用。IOSVRP里面,[]里面只能填写数字09,不能填写多位数。JUNOS中支持填写多位数。
[123-125]*
Null
123123 124124 124 124;……;
-
连接符,指定一个范围中一个值
123-125
123
124125
_
匹配一个符号。如逗号,括号,空格符号等。
JUNOS不支持。
 
 
 
注:在JUNOS中,9929{3}=9929 9929 9929,不是=992999
 
 
二、常用的as-path
1Null as-path----匹配本AS内的路由
  set policy-options as-path NullASPath ^&
或者:set policy-options as-path NullASPath “()”  ******注意,此种用法在IOS上不支持;JUNSO上双引号不可省略。
 
 
用法举例:电信城域网中,BR只把本城域网内的明细路由(及缺省路由)通告给下挂的BRAS设备;既能减少BRAS上的路由条目,同时也利于城域网业务灵活部署。
 
2、任意as-path(包括空):
      set policy-options as-path AnyPath .*
 
   用法举例:通常用在as-path列表的最后一条,在前面deny的基础上,允许其他的所有通过。
 
3、经过某个AS传递过来的路由(经某个AS穿越的路由):
      set policy-options as-path ThroughCertainAS “.* AS_number .+”
 
   用法举例:在城域网与163CN2的对接中,明确规定CN2163间的互访流量不能通过城域网进行穿越。因此在向163CN2)通告路由的时候,可以使用上述as-path禁止从CN2163)收到的路由再向163CN2)通告。
 
4、从某个邻居AS传递过来的路由:
      set policy-options as-path ThroughCertainAS “AS_number .*”
 
5、从某个AS始发的路由:
      set policy-options as-path ThroughCertainAS “.* AS_number