• ベストアンサー

index関数で複数個抜き出す

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

  • Perl
  • 回答数4
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • インデックス(index)関数を用いて

    ある数値配列をもったファイルがあります。(100個ほど数値があるとしてください)その中から、自分でプログラムを作る際に指定した連続した配列(7、8個程度だと考えてくだされば結構です)を探し、それが見つかった場所から配列の最後までを表示するプログラムを作りたいんですが、どのようにしたらいいんでしょうか? インデックスindexだけでは、指定した文字が存在するかしないかの判断はできると思われるんですが。 実行する際には、以下のようにするつもりです。 プログラムファイル名.pl データファイル(数値配列)名.txt 検索する数値列(ここでは簡単に表示するために1234567)としておきます。 わかりにくくてすいませんが、回答よろしくお願いします。

  • 文字列検索(例えばindex関数)をバイト単位で行いたい

    やりたいことは日本語文字列の処理で、特定の文字を切り抜きたいのですがうまくいきません。 なぜなら、文字列を切り抜くsubstr関数がバイト単位であるのに対し、文字列を検索するindexがバイト単位でおこなわれていないからです。 例: 文字列"12万3456円"から、円だけを取り除きたいとします。 $str = "12万3456円"; $index = index($str,"円"); $newStr = substr($str, 0, $index); indexは7を返すが、substrで0から7番目を切り取っても、バイト単位なのでうまくいきません。 文字列の検索をバイト単位で行う方法を教えてください。 おねがいします。

    • ベストアンサー
    • Perl
  • (excel)値が連続していた場合、削除してしまうマクロ

    ある列で、値(文字)が連続していた場合、 一番上の行のみ残し、他の行を削除 そして、番号を*-*と合体させたいのですが、、、 マクロをつかわなきゃいけないと思うんですけど 勉強中でなかなか完成できません! どなたかレクチャーお願いします! (例) 1 りんご 2 りんご 3 みかん 4 みかん 5 みかん 6 もも 7 もも  ↓ 1-2 りんご 3-5 みかん 6-7 もも

  • Excel 条件に合うセルを数える関数

    A1 りんご A2 みかん A3 ぶどう A4 みかん A5 もも A6 りんご A7 かき  ↑ こんなかんじでセルに文字がはいっています。 りんごという文字が入っているセルは何個あるか? という感じで知りたいのですが、種類がたくさんありすぎてCOUNTIF関数では、大変です。 それ以外に方法は、ありますでしょうか? おわかりの方教えてくださーい!

  • エクセル関数の検索について

    エクセルの関数についてご教授下さい。 以下のように文字列が記入されています。 (列A) りんご a b c (w) (k) ! みかん u b c (w) (k) ! ○”りんご”の行から”!”の行までを検索して、文字列”a”があるかを確認したい ○”みかん”の行から”!”の行までを検索して、文字列”a”があるかを確認したい ○()で記載している文字列は場合によって記入されているため、毎回同じ行数ではない このような条件がある時に、関数で要件を満たす事はできますでしょうか? イメージ的には、以下のようにできればと思ってます。 1.A列全体から”りんご”を検索 2.”りんご”行から下の”!”までの間で”a”があるかを確認 3.A列全体から”みかん”を検索 4.”みかん”行から下の”!”までの間で”a”があるかを確認 もしくは 1.A列全体から”りんご”を検索 2.”りんご”行から下で、”a”があるかを確認 3.A列全体から”みかん”を検索 4.”みかん”行から下で、”a”があるかを確認 このような感じで作れますでしょうか? よろしくお願いいたします。

  • HTMLのテーブル内容を配列にするには

    <html> <head></head> <body> <table border="0">   <tr>     <td>りんご</td>     <td>100円</td>   </tr>   <tr>     <td>みかん</td>     <td>80円</td>   </tr>   <tr>     <td>もも</td>     <td>160円</td>   </tr> </table> </body></html> 上のような内容のHTMLページを読み込み、 テーブルの一番左の行(りんご、みかん、もも)の内容を   @list=("りんご","みかん","もも"); このように配列に代入したいのですが、 どうすればいいでしょうか。よろしくお願いします。

    • ベストアンサー
    • Perl
  • エクセルの関数または、VBAでできますか?

    次のような表があったとします。 商品  1日目  2日目  3日目   必要部品  在庫  過不足 A     20              みかん   50 B     10   10         みかん   50 C         20    20     みかん   50   不足 A     30               もも   100 B     15   15          もも   100 C         30    30      もも   100 A     100              りんご   200 B     50   50         りんご   200 C         100   100     りんご   200   不足 ここで、みかんの在庫は50個となり、 商品Aの必要数は、20個で足りることになります。 商品Bの必要数は、20個で1日目の必要数とあわせても足ります。 商品Cになると必要数はさらに40個増え、合計80個となり、 在庫の50個では足りなくなります。 ももの場合は、すべて足りることになり、 りんごの場合は、商品Bで在庫が無くなり、商品Cの分は、足りないことになります。 この表の右端に、これらの結果を計算式で求めることはできないでしょうか? 判りにくいかもしれませんが、よろしくお願いします。

  • どの関数を使えばいいかわかりません。

    漠然としたタイトルですみません。 たとえば・・・      A     B    C     D       1班    2班   3班   4班    オレンジ  キウイ  チェリー さつまいも    にんじん  りんご  みかん  いちご    もも    なし   すいか  メロン とあった場合、もし、例えば『りんご』をF列に入れ、この表から探し、その列の列タイトルを隣のF列に表示したい。    ↓     E   F    りんご  2班    すいか  3班           これはどのような関数を使えばよろしいでしょうか? よろしくお願いします。

  • 秀丸で、複数の置換を1ステップにまとめることはできるのでしょうか。

    秀丸で、複数の置換を1ステップにまとめることはできるのでしょうか。 たとえば りんごみかん という文字列があるとして “りんご”は“林檎”へ置換。 “みかん”は“蜜柑”へ置換。 をして、結果的に 林檎蜜柑 という文字列にしたい場合に それぞれ置換をする、合計2ステップの置換作業をするのではなく 一度の置換(1ステップ)でこれを実現することは可能でしょうか。 意味不明でしたら加筆いたしますのでよろしく御願いします。

  • javascriptでの文字列操作

    こんにちは。 javascriptでの文字列操作で躓いてしまったのでご教授ください。 例えば、 var str = "00000"; という文字列があったとして、これの2文字目を”1”に変更したいといった場合、javascriptではどのように操作するのが簡単でしょうか。 phpですと、 $str = "00000"; $str[1] = "1"; といった記述で操作できた記憶があるのですが、調べてみても同様の操作が見当たらず・・・。 文字列を分割して+で足すような感じの処理か、配列にして繰り返し処理といった感じになってしまうのでしょうか。 宜しくお願い申し上げます。