• ベストアンサー

マッチした回数を知るには

たとえば$testの中に "abc"という文字列がいくつ(何回)含まれているか? ということを知りたい場合、 どのようにコーディングすればよいのでしょうか? 初歩的な質問で恐縮ですが、どなたかご教示ください。 よろしくお願いします。

  • Perl
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

こんな感じで出来ます。 $test = "abcxxxxxxabcxxxxabc"; $num = ($test =~ s/abc/abc/g); この$numに置換回数が入ります。 実際には同じ文字で置換する為、$test自体は変化しません。

Koji001
質問者

お礼

ありがとうございます。 通常のように文字列置換して、 そのステータスをチェックすれば 何度マッチしたか回数が入っている、 という考え方なのですね。 よく理解できました。 ありがとうございます。

その他の回答 (1)

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

$test="ababcabcdabcadbc"; $count= @{[$test=~/(abc)/g]}; print $count;

Koji001
質問者

お礼

ありがとうございます。 ソースそのものの意味は理解できませんでしたが、 お教えいただいた方法で実現できました。 お礼申し上げます。

関連するQ&A

  • htaccessのマッチが失敗します

    下記のように書いていますがうまく動作しません。 どのように手直しすればうまくいきますでしょうか??? hostname/abc_abc_ab_abc.html というテストを作ってみたのですが、本来であれば、abc3.cgiへ渡されるはずなのですが、全て、all.cgiへ渡されてしまいます。 お分かりになる方、宜しくお願い致します。 RewriteEngine on RewriteBase / ##リクエストURI中に、abcという文字列が3回以上ならabc3.cgiを動作させる RewriteCond %{Request_URI} "^(abc){3,}$" [NC] RewriteRule ^(.+)$ abc3.cgi?$1 [L] ##リクエストURI中に、abcという文字列が1から2回ならabc12.cgiを動作させる RewriteCond %{Request_URI} "^(abc){1,2}$" [NC] RewriteRule ^(.+)$ abc12.cgi?$1 [L] #どれにもマッチしない場合、all.cgiを動作させる。 RewriteRule ^(.+)$ all.cgi?$1 [L]

    • ベストアンサー
    • Perl
  • 【VB】初歩的で申し訳ないですが...

    お世話になります。VB6を使用しています。 文字列がずらっと入った変数があるとします。 その文字列の中に「abc」が入っていたらTRUE、なかったらFALSEを返したいのです。 「abc」は文字列のどこにあるか決まっていません。 どうすればいいのでしょう。 大変初歩的な質問になりますがよろしくお願いします。

  • マッチ以外を置換について

    test.txtのファイルの中に以下のコメントがはいっています。 --- test.txt(置換前) 各URLは以下の通りです。 (1)hoge.com (2)hoge123.com (3)hoge222.com --- ファイルの中のhoge.comはそのままで、以下のようにその他の文字は他の文字に置換を行いたいと思ってます。 --- test.txt(置換後) 各URLは以下の通りです。 (1)hoge.com (2)abc.com (3)abc.com --- 指定した文字(hoge.com)を置換する方法は簡単に行えるのですが、指定した文字以外の文字を置換する場合、どのように書けばいいでしょうか? どなたかよろしくお願いします。

    • ベストアンサー
    • Perl
  • VBのプログラムで、実行時に与えられた値の取得方法について

    VB初心者です。 VBのプログラム呼び出しで、実行時に与えられた値を取得したいのですが、 そのやり方がわかりません。 「C:¥TEST.EXE "abc"」で、実行したとき、"abc"の文字列を TEST.EXEで取得したいのですが、このときのVBのコーディングを 教えて下さい。 宜しくお願い致します。 

  • 正規表現で括弧にマッチさせたいのですが・

    Javaで正規表現を使おうとしてるのですがうまく行きません。 次のようにマッチさせたいです。 マッチさせたい文字列 : (abc)and(efg) マッチする文字列 : abcとefg マッチさせたい文字列 : (abc(efg)) マッチする文字列 : abc(efg) もしくは abc(efg)とefg とのようにまっちさせたいです。上の方はできたのですが、下の方がabc(efgとマッチしてまうのです。 いい方法を教えてください><お願いします。

  • 「マッチしない」正規表現の書き方

    正規表現について、おたずねします。 文字列 abc,def,ghi のいずれかにマッチする正規表現は (abc|def|ghi) ですよね。 それでは、「abc,def,ghi のいずれにもマッチしない」正規表現は、どう書けばいいのでしょうか? あちこち調べましたが、どうしてもわかりません。 ただし、if $a =~ /(abc|def|ghi)/ などで、=~ を !~ に直す、というのはナシです。あくまでも右辺の式の中で表現したいのですが…

  • PHP 正規表現による文字列の抜き出しについて

    PHP 正規表現による文字列の抜き出しについて 初歩的な質問で申し訳ありません。いくつかググったのですが、それでも自分の求める形を見つけられず質問させて頂きました。 「あいうえおかきくけこさいすせそ $abc12345678 $99999 たちつてと」 このような文字列の時に、 『$abcで始まって半角スペースで終わる所までの部分を抜き出す』には、 どのように記述すれば宜しいでしょうか。 (上記の文字列の場合は、「$abc12345678」を抜き出したいことになります。) よろしくお願いします。

    • ベストアンサー
    • PHP
  • いずれか一つでもマッチすればOKという…

    あまりにも初歩的な質問だとは思うのですがどうにも分かりませんので どうか教えていただけませんでしょうか。 例えばfoo、bar、bazと、三つの文字列を指定しておき、入力されたデータにその三つのうちのどれか一つでも含まれていればOK、一つも含まれていなければエラーになるようにするにはどうすれば良いのでしょうか。 言葉足らずだったりわかりにくいかもしれません、申し訳ありません。 どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • 正規表現 許可文字列 かつ 指定連続文字列の排除

    わかりにくいタイトルで恐縮です。 初歩的な問題かもしれませんが、もう何日も悩み続けており、ヒントでもいただけると助かります。 たとえば、 正規表現にて 英字のみ(1文字以上) という場合は preg_match("/[a-z]+/i",$string) という風にすればいいと思います。 ここで、英字のみ(1文字以上) しかし、abc という連続文字列があれば該当させない、という場合どういう正規表現を作ればいいのでしょうか? preg_match("/[a-z^(abc)]+/i",$string) みたいなヘンテコなものを作ってみたりしてみたのですが、文法違いなのか、やはり正常には動いてくれません。 ([^a][^b][^c]) なんていうのも違いますし。 狙いは、文字列の最初でも最後でも途中でも、指定文字以外や指定連続文字列がある場合は、エラーを出す、というようなものにしたいのです。 なにかヒントいただければと思います。

    • ベストアンサー
    • PHP
  • マッチの中に変数は使えませんか?

    マッチの中に変数をどうにかして使いたいのですが 無理でしょうか? $test =~ s/aaaa/bbbb/g; 通常、$test の中の aaaa という文字列が bbbb に かわると思いますが、これを、 $a = 'aaaa'; $b = 'bbbb'; $test =~ s/$a/$b/g; みたいに使えれば理想なのですが。

    • ベストアンサー
    • Perl