gpt4 book ai didi

regex - Perl 正则表达式多行匹配到哈希

转载 作者:行者123 更新时间:2023-12-04 22:49:45 27 4
gpt4 key购买 nike

我成功解析了一个 cisco 配置文件,并使用以下的多行正则表达式抓取了每个标记之间的配置部分(cisco 使用了 ! 符号):

/(search string)/i .. /^!/ 

我的代码看起来像:
#!/usr/bin/perl -w
use strict;
use Data::Dumper;

my (@results, @data) ;

#Test data to simulate a while loop on a file-handle running through a config file.
@data = (
"vlan 81" ,
" name Vlan 81 test1" ,
"!" ,
"vlan 82" ,
" name Vlan 82 test2" ,
"!" ,
"vlan 83" ,
" name Vlan 83 test3" ,
"!"
);

foreach ( @data ) {
if ( /vlan/i .. /^!/ ) {
push (@results , $_) ;
}
}

print Dumper ( @results ) . "\n" ;

exit;

它工作得非常好,但我想将结果推送到一个散列中,代码的每一部分都是一个匿名数组,所以结果看起来像:
%Vlan -> [Vlan 81, name Vlan 81 test1] , [Vlan 82, name Vlan 82 test2] , [Vlan 83, name Vlan 83 test3]

但是我不知道该怎么做,我的代码在搜索字符串和标记之间每行匹配,我最终将结果逐行重建到另一个数组中。

任何帮助深表感谢。

干杯,

安迪

最佳答案

我不确定你对哈希的意思,因为你描述的内容只是匿名数组的列表。没有键,因此您只能生成一个数组。如果您能解释数据的哪一部分是关键,那么我们可以进行散列。
use warnings pragma 优于 -w shebang 修饰符,因为它更灵活并且可以被否定。

范围运算符 ..可能很可爱,但您不能尽可能地将其挤进使用中。

将输入分隔符设置为 "!\n"将允许您一次读取所有相关行,然后可以将其推送到您的阵列上。

代码看起来像这样

use strict;
use warnings;

use Data::Dumper;

my @Vlan;

$/ = "!\n";

while (<DATA>) {
chomp;
push @Vlan, [split /[\r\n]+/];
}

print Data::Dumper->Dump([\@Vlan], ['*Vlan']);

__DATA__
vlan 81
name Vlan 81 test1
!
vlan 82
name Vlan 82 test2
!
vlan 83
name Vlan 83 test3
!

输出
@Vlan = (
[
'vlan 81',
'name Vlan 81 test1'
],
[
'vlan 82',
'name Vlan 82 test2'
],
[
'vlan 83',
'name Vlan 83 test3'
]
);

编辑

如果散列的键总是记录集的第一行,那么这个程序会按照你的要求产生一个散列
use strict;
use warnings;

use Data::Dumper;

my %Vlan;

$/ = "!\n";

while (<DATA>) {
chomp;
my ($k, $v) = split /[\r\n]+/;
$Vlan{$k} = $v;
}

print Data::Dumper->Dump([\%Vlan], ['*Vlan']);

__DATA__
vlan 81
name Vlan 81 test1
!
vlan 82
name Vlan 82 test2
!
vlan 83
name Vlan 83 test3
!

输出
%Vlan = (
'vlan 81' => 'name Vlan 81 test1',
'vlan 83' => 'name Vlan 83 test3',
'vlan 82' => 'name Vlan 82 test2'
);

关于regex - Perl 正则表达式多行匹配到哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9924271/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com