• ベストアンサー

index関数で複数個抜き出す

$str="りんご・みかん・もも・りんご"; $len=index($str,"りんご"); こんな記述があったとして、 「$len」に「0」だけを返すのではなく文字列に含まれる全ての「りんご」の場所を配列に代入したいのですが、どうすればいいのでしょうか。 こんな感じです。 @len=(0,22); よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.1

見つからなくなるまでループで回せばいいと思います $str="りんご・みかん・もも・りんご"; $i=0;$idx=0; while(index($str,"りんご",$idx) != -1){ $len[$i]=index($str,"りんご",$idx); $idx=$len[$i] + 1; $i++; } print join(',',@len);

is_may
質問者

お礼

できました! やっぱいろいろ方法があるんですね。 最初はfor()とredoを使ってやろうと思ってたんですがどうもうまくいかなくて・・ ありがとうございましたm(_ _)m

その他の回答 (3)

  • kapura
  • ベストアンサー率50% (48/95)
回答No.4

No.2の回答とほとんど同じですが、 $str = "りんご・みかん・もも・りんご"; push @len, pos($str)-6 while $str =~ /りんご/g; print join ",", @len; push @len, length($`) while $str =~ /りんご/g; もわかりやすいかも。

参考URL:
http://okwave.jp/kotaeru.php3?q=1836361
is_may
質問者

お礼

解決しました。 ありがとうございました。

  • t140
  • ベストアンサー率39% (59/150)
回答No.3

$str="りんご・みかん・もも・りんご"; $p= 0; $target="りんご"; $len= length($target); for (split($target, $str)){ $p+= length; push(@len, $p); $p+= $len; } print join(",",@len),"\n";

is_may
質問者

お礼

解決しました。 ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

$str="りんご・みかん・もも・りんご"; while(1){ $str=~ /りんご/g; last unless pos($str); push @len, pos($str)-length("りんご"); } print join(",",@len);

is_may
質問者

お礼

難しいですね・。 解決しました。ありがとうございました。

関連するQ&A