perl多个正则表达式匹配多行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl多个正则表达式匹配多行相关的知识,希望对你有一定的参考价值。
我正在努力尝试在文本文件中的一组行中捕获多个匹配项。
数据采用了一堆形式
AO22_X1N_A9PP96CTS_C24 SYN_INC_187(.A0(test_so6),. AA1(n2218),. B0(U_PAUSEdata_ff_int_28_),. B1(n2),. Y(n2597));
NAND3_X1R_A9PP96CTUL_C16 SYN_INC_154(.A(n1563),. B(U_PAUSEwcnt),. C(n1640),. Y(n1467));
第一件是名字。可能会稍后想要但现在我对端口ex .A(网)感兴趣理想情况下我想捕获所有输入网名(带有A,B,C,D等)和单输出.Y(网)
最终我想将它们存储到散列中,其中输出网是键,数据是输入数组的引用,但是现在我只是试图获取所有输入网络。
这就是我目前正在使用的
open (FILE, "<maca") or die("Can not open $file");
while (defined(my $cur_line = <FILE>)) {
if ($cur_line =~ m/[A-Z].*?\.[A-C]\d* \( (.*?) \).*?;/mg) {
print "THIS gate $cur_line $1 $2 $3\n";
}
}
我正在尝试这个显示器
该门NAND3_X1R_A9PP96CTUL_C16 SYN_INC_154(.A(n1563),. B(U_PAUSEwcnt),. C(n1640),. Y(n1467));
v1563 U_PASSWeed v1640
但我明白了。实际上我并不关心第二线的第一线。第一个是调试。我认为m会搜索多行,而g会全局匹配多行字符串。我错过了什么
此门.B(U_PAUSEwcnt),. C(n1640),. Y(n1467));
n1sh40
如果我理解你正确你正在寻找这样的东西:
while ($data =~ /(\w+)\s*\((.+?)\)\s*;/gm) {
my $line = $1;
my $vals = $2;
while ($vals =~ /\.(\w+)\s*\(\s*(\w+)\s*\)/g) {
print "$line .. $1: $2.\n"
}
}
我把变量$data
称为所有行 - 对吗?我首先分割线条,捕捉( .. )
之间的字符串,然后拉出键值对。看起来所有名称都是字母数字+“_”,每个\w
很好地捕获。
希望这可以帮助?
以上是关于perl多个正则表达式匹配多行的主要内容,如果未能解决你的问题,请参考以下文章