2011-01-14 6 views
2

私は、角括弧で囲まれたデータの複数のインスタンスを含む行を持っています。perlを使って一行に数回現れる角括弧の間にデータを抽出するにはどうすればよいですか?

[data 1] junk [data 2] junk,junk [data 3] junk [data 4] 

goo正規表現はありますか?だから私は使用することができます

print $1,$2,$3,$4; 

ありがとう!

+4

$s = q([data 1] junk [data 2] junk,junk [data 3] junk [data 4]);

。また、角括弧がネストできる場合、その言語は正規表現で解析できないほど複雑です。あなたはPerlの正規表現の拡張でそれを行うことができますが、地獄のように汚いです。その場合はパーサジェネレータを使用する方が良いでしょう。 – arnsholt

+0

時間[846.078000]〜[857.562000]、クロック[Clock1]、月[12月] – nebulus

答えて

4
my $s = "[data 1] junk [data 2] junk,junk [data 3] junk [data 4]"; 
my ($one, $two, $three, $four) = $s =~ /\[([^\]]*)\]/g; 
print $one, $two, $three, $four; 
+4

の時間は、ネストされた角括弧のペアが許可されていないことを前提としています。 – cam

+0

私は$ 1、$ 2、$ 3、$ 4の印刷物を使うことができる場所が必要です。 – nebulus

+0

を参考にしてください。これを変更して$ 1、$ 2、$ 3、$ 4を使用するつもりはありませんが、 。 – cam

1

あなたが探して、すべてが迅速にプリントアウトがある場合、これはそれを行う必要があります..あなたは、正規表現がジャンクデータにかなり依存していることを作る方法
print join(', ', @{[$s =~ /\[(.*?)\]/g]}), "\n";

関連する問題