dポイントプレゼントキャンペーン実施中!

$str="りんご・みかん・もも・りんご";
$len=index($str,"りんご");

こんな記述があったとして、
「$len」に「0」だけを返すのではなく文字列に含まれる全ての「りんご」の場所を配列に代入したいのですが、どうすればいいのでしょうか。
こんな感じです。

@len=(0,22);

よろしくお願いします。

A 回答 (4件)

見つからなくなるまでループで回せばいいと思います



$str="りんご・みかん・もも・りんご";
$i=0;$idx=0;
while(index($str,"りんご",$idx) != -1){
$len[$i]=index($str,"りんご",$idx);
$idx=$len[$i] + 1;
$i++;
}
print join(',',@len);
    • good
    • 0
この回答へのお礼

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

ありがとうございましたm(_ _)m

お礼日時:2006/09/21 18:23

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/21 18:24

$str="りんご・みかん・もも・りんご";


$p= 0;
$target="りんご";
$len= length($target);
for (split($target, $str)){
$p+= length;
push(@len, $p);
$p+= $len;
}
print join(",",@len),"\n";
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/21 18:24

$str="りんご・みかん・もも・りんご";


while(1){
$str=~ /りんご/g;
last unless pos($str);
push @len, pos($str)-length("りんご");
}
print join(",",@len);
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/09/21 18:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!