perl 正则匹配嵌套结构

perl 正则匹配嵌套结构,第1张

概述有这么一道题。。 aaa   bbb   #if defined(__MMI_DEL__)      ccc   #endif   ddd   eee   #if defined(__MMI_DEL__)      fff      ggg   #endif   hhh @H_404_1@

有这么一道题。。

  aaa      bbb      #if defined(__MMI_DEL__)         ccc      #endif      ddd      eee      #if defined(__MMI_DEL__)         fff         ggg      #endif      hhh   
要求匹配 注释外的内容,匹配之后的内容: aaa bbb ddd eee hhh 可以利用/^xxx/../^xxx/结构来匹配 ,但是出现了以下的嵌套结构,

 

  aaa      bbb      #if defined(__MMI_DEL__)         ccc      #endif      ddd      eee      #if defined(__MMI_DEL__)         fff         ggg      #if defined(__EX222__)         KKK      #if defined(__EX222__)      woshi      #endif        LLLL      #endif      #endif      sdffff      #if defined(__EX222__)      sdfsdf      sdff      #endif      sdfdsf   
就没法用用上面的结构了,必须要使用平衡组,或者是递归来做,其实上面的代码也可以看做是<div></div> 这种类型,简单点就是(1*(1+2)/3)这种类型的括号嵌套,可以利用(?R)来递归(perlre中有详解),或者是(??{code}) 动态正则表达式结构。 以下我利用(??{code})来示范写了一段。。  
  #!/usr/bin/perl      use strict;      use warnings;      my (@arr,$re,$line,@tmp);      while(<DATA>){      chomp;         s/#if\s*defined.*?$/(/g;  #这里替换成(和)方便匹配         s/#endif/)/g;         push @arr,$_;      }      $line .= "$_\_" for @arr;      #print $line;      $re = qr/(?>[^()]+|\((??{$re})\))*/;      while($line =~ /(\w*)\($re\)(\w+)/g){          push @tmp,split/\_/,"";      }      print join("\n",@tmp);      __DATA__      aaa      bbb      #if defined(__MMI_DEL__)         ccc      #endif      ddd      eee      #if defined(__MMI_DEL__)         fff         ggg      #if defined(__EX222__)         KKK      #if defined(__EX222__)      woshi      #endif        LLLL      #endif      #endif      sdffff      #if defined(__EX222__)      sdfsdf      sdff      #endif      sdfdsf   

 output:

aaa bbb
  ddd eee
  sdffff
  sdfdsf 总结

以上是内存溢出为你收集整理的perl 正则匹配嵌套结构全部内容,希望文章能够帮你解决perl 正则匹配嵌套结构所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1282514.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存