meh*_*aro 6 regex perl perl5.8
我有一个表达式,我需要拆分并存储在一个数组中:
aaa="bbb{ccc}ddd" { aa="bb,cc" { a="b", c="d" } }, aaa="bbb{}" { aa="b}b" }, aaa="bbb,ccc"
Run Code Online (Sandbox Code Playgroud)
一旦拆分并存储在数组中,它应该看起来像这样:
aaa="bbb{ccc}ddd" { aa="bb,cc" { a="b", c="d" } }
aaa="bbb{}" { aa="b}b" }
aaa="bbb,ccc"
Run Code Online (Sandbox Code Playgroud)
我使用Perl版本5.8,有人可以解决这个问题吗?
使用perl模块"Regexp :: Common".它有一个很好的平衡括号正则表达式,效果很好.
# ASN.1
use Regexp::Common;
$bp = $RE{balanced}{-parens=>'{}'};
@genes = $l =~ /($bp)/g;
Run Code Online (Sandbox Code Playgroud)
在perlre中有一个例子,使用v5.10中引入的递归正则表达式功能.虽然你被限制在v5.8,但是其他人来这个问题应该得到正确的解决方案:)
$re = qr{
( # paren group 1 (full function)
foo
( # paren group 2 (parens)
\(
( # paren group 3 (contents of parens)
(?:
(?> [^()]+ ) # Non-parens without backtracking
|
(?2) # Recurse to start of paren group 2
)*
)
\)
)
)
}x;
Run Code Online (Sandbox Code Playgroud)
尝试这样的事情:
use strict;
use warnings;
use Data::Dumper;
my $exp=<<END;
aaa="bbb{ccc}ddd" { aa="bb,cc" { a="b", c="d" } } , aaa="bbb{}" { aa="b}b" }, aaa="bbb,ccc"
END
chomp $exp;
my @arr = map { $_ =~ s/^\s*//; $_ =~ s/\s* $//; "$_}"} split('}\s*,',$exp);
print Dumper(\@arr);
Run Code Online (Sandbox Code Playgroud)