私はWiktorとCasimirの両方の例を試しました。どちらもうまくいった。
#!/usr/bin/perl
use strict;
use warnings;
my %testHash = (
'0' => '',
'1' => 'abc(def)ghi',
'2' => 'abc(def)ghi(jkl)',
'3' => 'abcdef(ghi)',
'4' => '(abc)',
'5' => '(abcd)efg'
);
# Solution 1
print "By Wiktor:\n";
foreach my $key (sort keys %testHash) {
my $str = $testHash{$key};
my $regexp = qr/(\([^()]* \))/x;
my @strArr = grep {/\S/} split /$regexp/, $str;
print "$str - ".join(", ", @strArr)."\n";
}
# Solution 2
print "\nBy Casimir:\n";
foreach my $key (sort keys %testHash) {
my $str = $testHash{$key};
my (@strArr) = $str =~ /[^\s(]+|\([^)]*\)/g;
print "$str - ".join(", ", @strArr)."\n";
}
By Wiktor:
-
abc(def)ghi - abc, (def), ghi
abc(def)ghi(jkl) - abc, (def), ghi, (jkl)
abcdef(ghi) - abcdef, (ghi)
(abc) - (abc)
(abcd)efg - (abcd), efg
By Casimir:
-
abc(def)ghi - abc, (def), ghi
abc(def)ghi(jkl) - abc, (def), ghi, (jkl)
abcdef(ghi) - abcdef, (ghi)
(abc) - (abc)
(abcd)efg - (abcd), efg
ありがとう!完璧に動作しますが、警告メッセージが表示されたら/ g修飾子を削除しました:extract_string.plで/ g修飾子を使用しても意味がありません – criz
@criz:True、分割方法が一致してから削除するのを忘れました1。 –