• 締切済み

perl の grepで 全角カタカナで検索できません

perl の以下のソースで、実行エラーになってしまいます。 grep で全角カタカナで検索できないのです。半角カタカナでは、うまく動きました。 全角文字(たとえば’中華’)でも正しく「中華料理」と出力されます。 ’ラーメン’で検索したら、’ラーメン店’と出力されるのが正しいと思うのですが、 なぜ動かないんでしょ? ↓ソース #!/usr/bin/perl @aaa = ("ラーメン店","カレーハウス","中華料理"); @aaa = grep /ラーメン/ , @aaa; print "Content-type: text/html\n\n"; print "<META http-equiv=\"Content-Type\" content=\"text/html; charset=Shift_JIS\">\n"; print <<"HTML"; @aaa HTML exit;

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

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

charsetをShift_JISとしていることから十中八九ShiftJIS使ってるからということだと思いますが、 CGIでいきなり動かさないでコマンドラインで試してみるか、ログを見ればすぐに判断つくような問題ではないですか? Unmatched [ in regex; marked by <-- HERE in m/ラー <-- HERE メン/ at okw.pl line 5. あるいはエラーメッセージをブラウザ画面に出るようにしとくとか。

ruttey
質問者

お礼

古典的な対策としては「@aaa = grep /\Qラーメン\E/ , @aaa;」と\Q\Eで囲む(quotemetaを利用する) であっさり解決でした。ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

文字コードの問題?

ruttey
質問者

お礼

古典的な対策としては「@aaa = grep /\Qラーメン\E/ , @aaa;」と\Q\Eで囲む(quotemetaを利用する) であっさり解決でした。ありがとうございます。

関連するQ&A

  • Perlの改行で、

    Perlの改行で、 print <<HTML; この場合は、ここを自由に改行出来ると思いますが、 HTML print "Content-type: text/html\n\n"; &aaa ("<p style='color:#eee'>色</p>~~~~~~~~"); &aaa ("~~~"); を使う場合、~~~の部分がとても長くなるときに、 テキスト内で改行する場合、自由に改行を入れても良いでしょうか? どうやれば良いのでしょうか?

    • ベストアンサー
    • Perl
  • 全角カタカナの確認

    perl 初心者です。 $str が全て全角カタカナかどうか確認したいのですがうまく行きません。 $str="アイウエオ"; などとして if ($str =~ /^[ア-ンーヽヾ]/){ print "OK\n"; } else {print "NG\n";} とすると、先頭の文字が全角カタカナかどうかの確認ができます。 ネット上の古い記事を見て if ($str =~ /^[ア-ン][ア-ンーヽヾ]+$/){ print "OK\n"; } else {print "NG\n";} としたのですが、NG になってしまいます。何処が違ってるのでしょうか。 [ア-ンーヽヾ] の部分は、「ーヽヾ」は先頭には来ないのでこうしたとのことです。 よろしくお願いしまう。

  • perlでHTML出力時の文字コード

    Perlスクリプト中でHTML出力しているのですが、print "Content-type: text/html\n\n";と記述するとEUCで正常に表示され、print "Content-type: text/html; charset=Shift_JIS\n\n";と明示的にSJISを指定すると空白ページが表示されてしまいます。このスクリプトの他の場所ではprint "Content-type: text/html; charset=Shift_JIS\n\n";で正常にSJISで表示されます。どうしてだかわかりません。どなたかご教授お願いします。

  • Perl UTF8 での全角カタカナチェック

    ■環境 Linux, Perl 5.8 です。 画面(HTML)と処理(Perl)は分けて作成しており、Templateモジュールで画面表示を行っています。 HTMLもPerlも文字コードはUTF-8です。 ■質問 フォームからうけとった文字列で全角カタカナと特定の全角記号以外はエラーとする 入力チェック処理(正規表現)がうまくチェックを行ってくれません。 SJISだと以下のような書き方があるそうなのですが、UTF8での書き方がわかりません。 ・SJIS if($data !~ /^(?:\x83[\x40-\x96])+$/){ $mes="全角カナ以外の文字が指定されています"; } UTF8での書き方を教えて頂きたいです。 なお、許容する全角カタカナと特定の全角記号は以下のとおりです。 ========================================================== アイウエオカキクケコサシスセソタチツテトナニヌネノ ハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン ァィゥェォッャュョヵヶヴガギグゲゴザジズゼゾダヂヅデド バビブベボパピプペポーヽヾ ========================================================== ご教授お願い致します。

  • perl CGIでのhttpヘッダー出力 (Content-type:

    perl CGIでのhttpヘッダー出力 (Content-type: text/html\n\n) が不要な場合について perlでCGIを作成しています。 多くの場合は、httpのヘッダー出力(Content-type: text/html\n\)を行っています。 毎回ではないですが、HTTPヘッダーの出力が不要な場合が存在します。 (HTMLにContent-type: text/html\n\が出力され表示されます。) そこで、HTTPヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • CGIが文字化けしてしまう。(Perl)

    環境 WinXP    Apache ActivePerl 開くソフトは「Tera pad」      でやっています。ソースは #!/usr/local/bin/perl print "Content-type: text/html\n\n"; print "<HTML>\n"; print "<HEAD><TITLE>CGI TEST</TITLE></HEAD>\n"; print "<BODY>ああああ。</BODY>\n"; print "</HTML>\n"; __END__ です。「ああああ」部分が「‚ ‚ ‚ ‚ B」 と表示されます。 どなたか解決方法ご存知の方いらっしゃいましたら ご回答お願いします。

    • ベストアンサー
    • CGI
  • Perl CGI -入力フォーム-

    Perlを始めたばかりの初心者です。 Perlの中にフォームを入れたいのですが、エラーが出てしまいます。 現在は、ローカルで作動させています。 #! c:/perl/bin/perl print "Content-type: text/html\n\n"; print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\">\n"; print "<head><title>TEST</title></head>\n"; print "<body>\n"; print "<p><input type="text" name="name"></p>\n"; print "</body>\n"; print "</html>"; 【print "<p><input type="text" name="name"></p>\n";】この記述がエラーの対象行となっています。 inputを使用する場合は他にも記述が必要なのでしょうか? 宜しくお願いします。

  • Perlからjavascript構文の出力について

    はじめまして。 現在javascriptを勉強中の者です。 PerlからHTML構文内にjavascript構文を追記し出力しようとしていますが、追記してPerlを実行させただけでInternal Server Errorとなってしまいます。 過去ログをいくつか見させて頂きましたが、自分のソースのどこが悪いのかさっぱりです;; やりたいことは、登録完了ポップアップを表示させるだけです。 表示条件等は別として、まずjavascript構文をソースに追記してポップアップを表示させたいです。 どうか良きアドバイスをお願い致します。 #!/usr/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; print qq! <HTML> <HEAD> <META Http-Equiv="Content-Type" Content="text/html;charset=EUC-JP"> <META name="robots" content="noindex,nofollow"> <TITLE>登録画面</TITLE> </HEAD> <BODY> <script type="text/javascript"> <!-- alert("登録完了"); // --> </script> <FORM ACTION="test.cgi" METHOD="post"> <FONT SIZE="4"><B>登録画面</B></FONT>  </BODY> </HTML> !;

    • ベストアンサー
    • Perl
  • PerlでHTTPヘッダの\nを外すとエラー

    【PerlでHTTPヘッダの最後の\nを1つでも外すとエラーになります】 初歩的なことですみません。 HTTPヘッダーの最後の\n\nなんですが、ヘッダーの文字列の後に改行が2つ?? と思って この\nを外して、 print "content-type:text/html;charset=utf-8"; とすると、「500 Internal Server Error」 print "content-type:text/html;charset=utf-8\n"; と\nが1つでも 「500 Internal Server Error」 となります。 「\n\n」と2つあればエラーにはならないんですが、なぜ必ず2つ必要なのでしょうか?これは改行が2つって意味ですかね? print "<html>\n"などの\nはソース上やコンソール出力結果上での改行なのはわかります。 この\nは改行したくなければ書かなくてもエラーになりませんよね。(当たり前ですが・・ #!/usr/bin/perl print "content-type:text/html;charset=utf-8\n\n"; ←HTTPヘッダーの\n\n print "<html>\n"; print "<body>\n"; print "<p>テキスト</p>\n"; print "</body>\n"; print "</html>\n";

    • ベストアンサー
    • Perl
  • 全角カタカナの正規表現

    if (preg_match('/[ァ-ヶー]+/', $value, $match )) { print ("$value"."はカタカナです。"."($match[0])"."<br />") } else { print ("$value"."はカタカナではない。<br />"); } という感じで全角カタカナにマッチさせる正規表現を使いたいのですが、このやり方だと「全角カタカナを含んでいる…」という表現になってしまいます。ある文字列が「すべて全角カタカナである」という正規表現を考えているのですが、なかなかうまくいきません。逆引きのサンプルなんかでもなかなか見つからなくて困っています。  同様に「すべて平仮名にマッチ!」というのにも応用できると思うのですが、なかなかうまく行きません。  是非、そのやり方やヒントをおしえてください。  マルチバイト対応なので[ぁ-ん]のような形で表記できます。またPerl互換(preg_match)で作っているので、Perlに詳しい方も是非是非おしえてください。

    • ベストアンサー
    • PHP

専門家に質問してみよう