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回まで
  • 登録:
  • 終了:2010/03/01 17:44:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:onishi No.1

回答回数31ベストアンサー獲得回数5

ポイント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
    評価というか、マッチさせている式そのものですね

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

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

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

回答リクエストを送信したユーザーはいません