1

次のような値を持つPerlの配列があります。

$Array[0] = "[a][b][c] good bad";
$Array[1] = "[d] apple";
$Array[2] = "[e][f] mango ";
$Array[3] = "[g] capgemini";

間のすべてのテキストを検索する通常の exp が必要[]です。
私はこれを書いた:

my @matched = grep {$_ ne ""} map { m/\[(.*?)\]/; $1; } @Array;

ただし、これはafrom $Array[0]efromのように最初の一致のみを検索し$Array[2]ます。から
のようにすべて取得したい。a,b,c$Array[0]

4

1 に答える 1

3

匿名ハッシュの使用とシジルの省略は混乱を招きます。ただし、これは私にとってはうまくいきます:

#!/usr/bin/perl
use warnings;
use strict;

use Data::Dumper;

my @Array;
$Array[0]= "[a][b][c] good bad";
$Array[1]= "[d] apple";
$Array[2]= "[e][f] mango ";
$Array[3]= "[g] capgemini";
my @matched = map { m/\[(.*?)\]/g } @Array;
print Dumper \@matched;

主なトリックは/g、グローバル マッチングのオプションを使用し、マッチングがすべての一致を返すようにすることです。

于 2013-04-09T08:54:49.693 に答える