Junos 复杂正则表达式问题

网络工程 杜松 瞻博网络
2021-07-27 08:32:30

我在 JNCIS 学习指南 ch1(社区正则表达式示例)中看到了这个解释,我有点困惑:

^65000:.{2,3}$ - AS 编号为 65000,社区值是任何 2 或 3 位数字,例如。65000:123,65000:16,和65000:999

^65010:45.{2}9$ - AS 编号为 65010。社区值是一个以 45 开头并以 9 结尾的五位数字。第三和第四位数字是任何重复两次的单个数字, 例如。65010:45 11 9、65010:45 99 9 和 65010:45 33 9。

如果.{2} 表示任何单个数字重复两次,那么我会争论 .{2,3} 如果任何单个数字重复至少两次,最多三次,而不是书中解释的任何 2 或 3 位数字。

这两个正则表达式的正确解释是什么?

谢谢,

2个回答

不确定任何 Junos 专业,但使用“标准”正则表达式,.{2}匹配任意两个字符,重复与否。

如果你需要两个相同的字符,它应该看起来像(.)\1.

.{2,3} 匹配两个或三个任意字符(相同或不同)。

我建立了一个 quick'n'dirty 实验室,看起来第一个例子实际上是正确的,而不是第二个。

第一个示例,我收到了三个路由,每个路由都标有65000:123,65000:999社区65000:16

{primary:node0}
root@lab-srx240h> show route table CE3.inet.0 community ^65000:.{2,3}$ detail

CE3.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
3.3.3.3/32 (1 entry, 1 announced)
        *BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 1383
                Address: 0x15d464c
                Next-hop reference count: 8
                Source: 192.168.88.3
                Next hop: 192.168.88.3 via reth4.100, selected
                State: <Active Ext>
                Peer AS: 65505
                Age: 7:34
                Task: BGP_65505.192.168.88.3+179
                Announcement bits (1): 0-KRT
                AS path: 65505 65505 I
                Communities: 65000:123 target:65505:1
                Accepted
                Localpref: 100
                Router ID: 192.168.6.1

192.168.5.0/24 (1 entry, 1 announced)
        *BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 1383
                Address: 0x15d464c
                Next-hop reference count: 8
                Source: 192.168.88.3
                Next hop: 192.168.88.3 via reth4.100, selected
                State: <Active Ext>
                Peer AS: 65505
                Age: 7:34
                Task: BGP_65505.192.168.88.3+179
                Announcement bits (1): 0-KRT
                AS path: 65505 I
                Communities: 65000:999 target:65505:1
                Accepted
                Localpref: 100
                Router ID: 192.168.6.1

192.168.88.0/31 (1 entry, 1 announced)
        *BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 1383
                Address: 0x15d464c
                Next-hop reference count: 8
                Source: 192.168.88.3
                Next hop: 192.168.88.3 via reth4.100, selected
                State: <Active Ext>
                Peer AS: 65505
                Age: 7:34
                Task: BGP_65505.192.168.88.3+179
                Announcement bits (1): 0-KRT
                AS path: 65505 I
                Communities: 65000:16 target:65505:1
                Accepted
                Localpref: 100
                Router ID: 192.168.6.1

第二个例子我有一条标记为65010:45129(不是65010:45119按照书上的)的路线,但我仍然得到匹配:

{primary:node0}
root@lab-srx240h> show route table CE3.inet.0 community ^65010:45.{2}9$ detail
CE3.inet.0: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
1.0.0.10/32 (1 entry, 1 announced)
        *BGP    Preference: 170/-101
                Next hop type: Router, Next hop index: 1383
                Address: 0x15d464c
                Next-hop reference count: 8
                Source: 192.168.88.3
                Next hop: 192.168.88.3 via reth4.100, selected
                State: <Active Ext>
                Peer AS: 65505
                Age: 2:23
                Task: BGP_65505.192.168.88.3+179
                Announcement bits (1): 0-KRT
                AS path: 65505 65505 I
                Communities: 65010:45129 target:65505:1 origin:65505:1
                Accepted
                Localpref: 100
                Router ID: 192.168.6.1

所以是的,.{2}意味着任何两个字符,.{2,3}意味着任何两到三个字符。