• ベストアンサー

条件判定文でのパタンマッチができない

ある配列(列)の中から大文字'P'または小文字'p'どちらかの数を数えるために次のような判定を繰返したいのですが、正規表現を使ってどのように書けばよいのでしょうか。 次の場合"P","p"どちらにもヒットしません。 初歩的なことを質問しているとは思いますが回答をお願いいたします。 if ($data[$row][$col] eq "[Pp]"){ $cnt_p++; } $data には次のような値が入っていて1,2列目にある"P"または"p"の数を計数したいのです。 P01 0P0 p11

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

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

判定部分を $data[$row][$col] =~ /[Pp]/ のようにすればいいです

palfait
質問者

お礼

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

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> $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
palfait
質問者

お礼

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

関連するQ&A