Perl正则表达式匹配

时间:2014-11-19 10:18:44

标签: regex perl

编辑:我有些难以表达自己。让我重新开始吧。 我有一个从文件中读取字符串的循环:

GigabitEthernet0/0
GigabitEthernet0/1
GigabitEthernet0/2
Serial0/0/0:0
Serial0/0/0:0.100

我正在尝试一些正则表达式来获取接口 Serial0 / 0/0:0

if ($lineSplitter[2] =~ /Serial0(.*):0[^(.\d)](.*)/ && $interfacebool eq "false"){
    $interfaceNeeded = $lineSplitter[2] ;
}

但它不起作用。 我在在线REGEXP模拟器上尝试了几样但仍然......没有结果...... 我想要的是获得主界面(Serial0 / 0/0:0),不是子界面(Serial0 / 0/0:0.100)

预期变量:

Serial0/0/0:0

我不想替换或获取子接口的一部分。我希望regexp匹配主界面而不匹配sub-one

对此误解感到抱歉。

3 个答案:

答案 0 :(得分:0)

如果要限制匹配,请使用锚点^匹配字符串的开头,使用$匹配字符串的结尾:

/^Serial0(.*):0$/

这只会匹配以Serial结尾的:0字符串。

答案 1 :(得分:0)

尝试以下内容:

perl -ne 'print if $_ =~ /Serial0\/\d\/\d:\d$/' data.txt

将匹配Serial0/x/x:x(例如,不是Serial0/0/0:0.100

答案 2 :(得分:0)

可能会有帮助吗?

m/^Serial[^\.]*[\s\n\r]/g