How can I extract a string between matching braces in Perl?

前端 未结 7 843
再見小時候
再見小時候 2020-12-06 06:19

My input file is as below :

HEADER 
{ABC|*|DEF {GHI 0 1 0} {{Points {}}}}

{ABC|*|DEF {GHI 0 2 0} {{Points {}}}}

{ABC|*|XYZ:abc:def {GHI 0 22 0} {{Points {{         


        
7条回答
  •  渐次进展
    2020-12-06 06:44

    I second ysth's suggestion to use the Text::Balanced module. A few lines will get you on your way.

    use strict;
    use warnings;
    use Text::Balanced qw/extract_multiple extract_bracketed/;
    
    my $file;
    open my $fileHandle, '<', 'file.txt';
    
    { 
      local $/ = undef; # or use File::Slurp
      $file = <$fileHandle>;
    }
    
    close $fileHandle;
    
    my @array = extract_multiple(
                                   $file,
                                   [ sub{extract_bracketed($_[0], '{}')},],
                                   undef,
                                   1
                                );
    
    print $_,"\n" foreach @array;
    

    OUTPUT

    {ABC|*|DEF {GHI 0 1 0} {{Points {}}}}
    {ABC|*|DEF {GHI 0 2 0} {{Points {}}}}
    {ABC|*|XYZ:abc:def {GHI 0 22 0} {{Points {{F1 1.1} {F2 1.2} {F3 1.3} {F4 1.4}}}}}
    {ABC|*|XYZ:ghi:jkl {JKL 0 372 0} {{Points {}}}}
    {ABC|*|XYZ:mno:pqr {GHI 0 34 0} {{Points {}}}}
    {
        ABC|*|XYZ:abc:pqr {GHI 0 68 0}
            {{Points {{F1 11.11} {F2 12.10} {F3 14.11} {F4 16.23}}}}
            }
    

提交回复
热议问题