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多个正则表达式匹配多行的主要内容,如果未能解决你的问题,请参考以下文章

perl正则表达式怎么匹配多行?

Perl 正则表达式多行匹配没有点

perl 正则表达式 匹配多行的问题

perl 正则表达式 模糊匹配

将多个正则表达式匹配之一分配给变量作为 Perl 单行(取消引用数组?)

Perl 中的正则表达式组:如何从正则表达式组中捕获与字符串中出现的未知数量/多个/变量匹配的元素到数组中?