perl初心者です。


次のようなファイルから、少数の部分だけを取り出してリストにするにはどうすればよいですか?

(1:0,2:0.001336,((((3:0.002674,4:0,25:0,26:0,50:0):0.001334,5:0.005347, ...

ここから
(0.001336, 0.002674, 0.001334, 0.005347, ...)
というリストを得たいです。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/03/01 16:41:46
  • 終了:2010/03/01 17:44:52

ベストアンサー

id:onishi No.1

onishi回答回数30ベストアンサー獲得回数52010/03/01 17:01:33

ポイント60pt

正規表現のマッチを配列コンテキストで受けるとマッチした部分のリストになるので、

my $str = "(1:0,2:0.001336,((((3:0.002674,4:0,25:0,26:0,50:0):0.001334,5:0.005347,  ...";
my @array = $str =~ /(\d\.\d+)/g;

でどうでしょう。

id:spidermite

ありがとうございました。~/ / でマッチした部分のリストを返してくれるんですね。勉強になりました。

2010/03/01 17:19:20
  • id:onishi
    説明不足ですみません!!
    ~/ / でマッチした部分のリストを返すわけではなく =~ で正規表現マッチさせている文自体をリストコンテキストで受け取ると、マッチ部分をリストで返します。
    >||
    my @array = ($str =~ /(\d\.\d+)/g);
    ||<
    と書いた方がわかりやすかったかもしれません。


  • id:spidermite
    なるほど。評価している式そのものを配列に渡しているんですね。
  • id:spidermite
    評価というか、マッチさせている式そのものですね

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません