いちばん失敗した人決定戦

現在Perlにて正規表現を用い,アクセス者のログが納めてあるlog.datからデータを検索し集計するといったアルゴリズムです.
ところが正規表現を用いたのは良いものの,アルファベット以外をパターンとして使用したとき,データを呼び出すどころか表示されない状況に陥ってしまいました.

elsif($referer =~ /abcd/i) {
$word2 = "abcd";
}

上記のコードは,パターンがアルファベットで構成されているため,正常にシステムが動作します.

elsif($referer =~ /あいうえ/i) {
$word2 = "あいうえ";
}

しかし,上記のコードはパターンが平仮名で構成されているため,冒頭で記している問題が発生してしまいます.

そこで
(1)パターンにアルファベット以外のものは使えるのか.
(2)パターンにアルファベット以外のものを使いたいときはどうすればいいのか.
についてお教えください.

また正規表現のほかに,文字列を検索し,頻度をカウントすることに長けているコードがございましたらお教え願います.

以上の内容で不明な点等ございましたら随時対応致します.
宜しくお願いします.

A 回答 (4件)

正規表現で日本語を扱う場合、Perlでは特別な処理をしてくれないので文字(の組み合わせ)によってはなんらかのメタ文字として認識される場合があるのでそのままでは使えません。



・正規表現によるマッチングを避ける。
http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83% …

・メタ文字を無効にする。(正規表現の先頭に\Qを入れる - \Eが含まれるケースを除外しておかないと危ない)
http://www.rfs.jp/sb/perl/02/09.html#%E3%83%86%E …

※頻度によるカウントってのがよくわからないのですが。

この回答への補足

回答ありがとうございます.
ご提示なされたURLを参考にしてみます.

>※頻度によるカウントってのがよくわからないのですが。
文字列を指定し,与えられたハッシュにどれだけ存在するかを割り出し,それをカウントして値にするといったものを考えております.

補足日時:2009/06/30 14:24
    • good
    • 0

$str = ' あいうえabcoaお ▲3+';



if( $str =~ /お/ ){
print "マッチ";
}else{
print "マッチしない";
}

としたらマッチしたので、アルファベット以外のでもマッチすると思いますが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます.
文字コードをいじったらマッチするようになりました.

お礼日時:2009/06/30 17:15

文字コードにさえ気をつければアルファベットだろうとひらがなだろうと漢字だろうとヒエログリフだろうとマッチできる. そして, あなたが文字コードに気をつけているかどうかはこの文面からは分からない.


「頻度をカウントする」のは, 普通はハッシュでしょうね.

この回答への補足

回答ありがとうございます.
質問文足らずですみません.文字コードはEUCとなっております.

補足日時:2009/06/30 14:28
    • good
    • 0

まずは、euc-jp に変えてみてはどうでしょうか。

この回答への補足

回答ありがとうございます.
文字コードはEUC,またlog.datに蓄積されているデータもEUCとなっております.

補足日時:2009/06/30 14:22
    • good
    • 0

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