- 论坛徽章:
- 0
|
本帖最后由 hztj2005 于 2016-08-28 12:03 编辑
转自perlmonks.org/?node_id=308039,用Regexp::Common模块实现:
use Regexp::Common;
my $balanced = qr/[^()]+|$RE{balanced}{-parens=>'()'}/;
sub extract {
my ($want, $from) = @_;
my $nested = qr/$balanced* \Q$want\E $balanced*/x;
$from =~ m/( \( $nested \) | \Q$want\E )/x;
return $1;
}
my $expr = '(((B,G),A,(A,B)),C,(D,(E))),F';
for ('A'..'H') {
print "$_: ", extract($_,$expr),"\n";
}
exit;
A: ((B,G),A,(A,B))
B: (B,G)
C: (((B,G),A,(A,B)),C,(D,(E)))
D: (D,(E))
E: (E)
F: F
G: (B,G)
H: |
|