電子書籍の厳選無料作品が豊富!

ある配列(列)の中から大文字'P'または小文字'p'どちらかの数を数えるために次のような判定を繰返したいのですが、正規表現を使ってどのように書けばよいのでしょうか。
次の場合"P","p"どちらにもヒットしません。
初歩的なことを質問しているとは思いますが回答をお願いいたします。

if ($data[$row][$col] eq "[Pp]"){
$cnt_p++;
}

$data には次のような値が入っていて1,2列目にある"P"または"p"の数を計数したいのです。
P01
0P0
p11

A 回答 (2件)

判定部分を


$data[$row][$col] =~ /[Pp]/
のようにすればいいです
    • good
    • 0
この回答へのお礼

できました。ありがとうございます。
基本的なことかもしれませんが、正規表現って面白くまた難しいと思ってしまいます。

お礼日時:2004/09/12 05:56

> $data[$row][$col] eq "[Pp]"



“eq”は「文字列が同じかどうか」を判定する演算子ですので、正規表現を認識しません。

手っ取り早く数えるなら、演算子trを使う方法があります:

$s = 'Papa told me';
$num_of_p = ($s =~ tr/Pp// );
print '#of P or p = ', $num_of_p, "\n";

参考URL:http://perldoc.jp/docs/perl/5.6.1/perlfaq4.pod
    • good
    • 0
この回答へのお礼

ありがとうございます。
"tr/// 演算子"がありましたね。
ただ今回、行/列の列方向に並んだ文字列から任意の文字数をカウントしたので、"tr/// 演算子"を使うには行-列の入れ替えを行ったあと適用しないといけないですよね。

お礼日時:2004/09/11 10:40

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