• ベストアンサー

正規表現にマッチする数

正規表現でマッチした部分を取り出したいとき、()で くくっておくと$1, $2,...として参照できますよね。 そのとき、予めいくつマッチするか分からない場合 マッチした数を知るということは可能でしょうか?

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

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

  • ベストアンサー
  • sisya
  • ベストアンサー率39% (97/245)
回答No.2

$1,$2で参照できるのは 「/(\w)(\w)/g」などかっこが複数ある場合です おそらくご質問の内容は「/(\w)*/g」といった 同じ個所に複数回HITする場合の事だと思うのですが、 その場合一旦マッチした部分を配列にいれて 配列のサイズを見ればわかりやすいかと思います。 例)数字の数をカウントします $Sourse = "1-2-3-4-5"; @Match = $Source =~ /(\w+)/g; print @Match;

hime-ichigo
質問者

お礼

なるほど、ありがとうございます! そうか、 @X = $Y =~ // みたいな書き方が可能なんですね。 知りませんでした…

その他の回答 (1)

  • iichiho
  • ベストアンサー率37% (416/1114)
回答No.1

マッチした数をいれておく変数を作っておいて、マッチするたびにカウントアップすればいいです。 $CNT=0;   #カウント数を入れる変数 if(マッチの条件){ $CNT++; }

hime-ichigo
質問者

お礼

すみません質問の仕方が悪かったようです… ちょっと話が違ったのですが、でも回答ありがとうございました。

関連するQ&A

  • [15]にマッチする正規表現

    [15]にマッチする正規表現 [15] にマッチする正規表現を書きたいのですが、うまくいきません。。。。 簡単だ、と思ったのですが。。。 expr "$DATA1" : .*\[15\].* と書くと、中の数字が15じゃなくてもマッチしてしまいます。 expr "$DATA1" : .*15.* であれば"15"にマッチしますが、対象の文字列の都合上、カッコでも識別する必要があり 困っております。[と]をエスケープする目的で\をつける、と思っているのですが、何か 思い違いをしているのでしょうか。

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

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

  • 正規表現のマッチについて

    正規表現について質問させていただきます。 以下のデータがあるとします。 山田太郎(やまだたろう)(ヤマダタロウ) 一個目の『(』の前にタブを挿入したいのですが、一個目の『(』にのみマッチさせる正規表現の書き方を教えて下さい。

  • マッチする部分を除いたものが欲しいのですが(正規表現)

    マッチする部分を除いたものが欲しいのですが。 $a = '/home/user/'; $b = '/home/user/aaaa' $c = [正規表現や置換演算子]で、-----あ $cが aaaaとなってほしい。「あ」の部分の書き方をご存知のかた教えていただけますか?

    • ベストアンサー
    • Perl
  • 正規表現/スペース以降改行までのグローバルマッチ

    JavaScript正規表現で、「スペース1つ」以降「改行」までのグローバルマッチを行いたいのですが、うまくいきません。 ■マッチさせたい内容 ・年末なのに ここをマッチさせたい ・正規表現が ここもマッチさせたい ・ ここもマッチさせたい ・ここはマッチさせたくない ・ここはマッチさせたくない ■うまくいかない正規表現 /\s{1}.*[\n\r]/g

  • 正規表現の達人にお聞きしたい。

    正規表現で、文字数は4文字ですが、そのうち1つでもaがあれば マッチするということで、1~3まではマッチし、 4はa無しなのでマッチせず、5は4文字でないのでマッチしない ような正規表現は書くことは可能でしょうか? 1) aaaa 2) ajjj 3) kaoa 4) jjjj 5) axxxx

  • 正規表現

    PHPのプログラミングの勉強をしています。 正規表現を使って?の1文字をマッチさせたいのですが http://hogehoge.com/?hoge=hoge などの/?の場合は正規表現でマッチさせないようにしたいのです。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 正規表現

    正規表現について勉強中です。 先頭2文字をたとえばYQで入力させたい場合は どうマッチさせればよいのでしょうか? if string.match(/^YQ|[0-9]/) == null { nullの場合の処理 } としていますが、うまくいきません。 正規表現についてはまったくの初心者ですので、 笑わないでくださいね。

  • 正規表現  マッチさせれない C#

    下記のもの全体にマッチさせる表現を考えていたのですが、 どぉしても思いつきません。 まだまだ正規表現についてわかっていないのでご教授いただけないでしょうか。 /// <summary> /// メソッド1 /// </summary> /// <param name="Out">1:入力文字,2:出力文字)</param> /// 文字列     の部分は行が増えたり減ったりするので /// と文字列と改行文字で1つのくくりにして それを任意の回数繰り返しでマッチさせようとしています。 ([/// .*] \r\n)*   (///[.<>/]* \r\n)*  など試しましたがマッチしません。 そもそもこのようなものをマッチさせること自体無理なのかもしれませんが その点も含めご教授お願いいただけますでしょうか。言語はC#です

  • (?:系の正規表現

    perlの正規表現で以下の意味は、ABC01かABC99のみマッチするということでよいでしょうか? /^ABC(?:01|99)$/ (?:は$1など使用しない場合に用いるで正しいでしょうか? (?系の正規表現について知識不足ですが、一覧や詳しい書籍がありましたら教えてください。 昔、 /^ABC01|99$/ とかいて、ABC99がマッチせず、99がマッチしたので、|を使うときは、()を書いたのですが$1など変に作用させたくなかったので、最近(?:系の存在を知ってもっと詳しく知りたくなりました。 (?:はPerlの正規表現特有のものでしょうか?

    • ベストアンサー
    • Perl

専門家に質問してみよう