- ベストアンサー
index関数で複数個抜き出す
$str="りんご・みかん・もも・りんご"; $len=index($str,"りんご"); こんな記述があったとして、 「$len」に「0」だけを返すのではなく文字列に含まれる全ての「りんご」の場所を配列に代入したいのですが、どうすればいいのでしょうか。 こんな感じです。 @len=(0,22); よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
見つからなくなるまでループで回せばいいと思います $str="りんご・みかん・もも・りんご"; $i=0;$idx=0; while(index($str,"りんご",$idx) != -1){ $len[$i]=index($str,"りんご",$idx); $idx=$len[$i] + 1; $i++; } print join(',',@len);
その他の回答 (3)
- kapura
- ベストアンサー率50% (48/95)
No.2の回答とほとんど同じですが、 $str = "りんご・みかん・もも・りんご"; push @len, pos($str)-6 while $str =~ /りんご/g; print join ",", @len; push @len, length($`) while $str =~ /りんご/g; もわかりやすいかも。
お礼
解決しました。 ありがとうございました。
- t140
- ベストアンサー率39% (59/150)
$str="りんご・みかん・もも・りんご"; $p= 0; $target="りんご"; $len= length($target); for (split($target, $str)){ $p+= length; push(@len, $p); $p+= $len; } print join(",",@len),"\n";
お礼
解決しました。 ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
$str="りんご・みかん・もも・りんご"; while(1){ $str=~ /りんご/g; last unless pos($str); push @len, pos($str)-length("りんご"); } print join(",",@len);
お礼
難しいですね・。 解決しました。ありがとうございました。
お礼
できました! やっぱいろいろ方法があるんですね。 最初はfor()とredoを使ってやろうと思ってたんですがどうもうまくいかなくて・・ ありがとうございましたm(_ _)m