• 締切済み

Shift-jisで正規表現

はじめまして。Perl初心者です。 やりたい事は、フォームからPOST形式で文字データを受け取り、 用意してあるtxtファイルから読み込んだデータの中から、正規表現でマッチするものを探すことです。 Windows環境であることと、入力(フォーム)も出力(表示するブラウザ等)もShift-jisなので、shift-jisで限定しています。 特にencodingを指定しなくても、ひらがなと漢字では上手くいきます。 カタカナと全角数字を入力したとき、上手くいきません。 色々調べていたら、以下のサイトさんで近いことが紹介されていました。 http://homepage1.nifty.com/nomenclator/perl/shiftjis.htm#solutions しかし、自身では力不足のため、解決出来ないでいます。どなたか詳しい方、ご教授お願いいたします。

  • Perl
  • 回答数1
  • ありがとう数0

みんなの回答

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

CPANに「ShiftJIS::*」でモジュールが幾つか上がっています。 貴方の探しているものがきっとあるはずです。

leaf-green
質問者

補足

ありがとうございます。 参考にさせて頂きました。 ActivePerlを使用しています。 確か新しいバージョンでは、標準モジュールになっているらしいのですが・・・。見当違いでしたら、すみません。 おかげさまで先日の問題点は独自の方法で何とかなりました。 また質問させていただくと思いますが、よろしくお願いします。

関連するQ&A

  • 全角カタカナの正規表現

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

    • ベストアンサー
    • PHP
  • 正規表現で全角ひらがなを判断

    入力画面から確認画面へPOSTで値を渡すときに、 あるPOSTデータを全角ひらがなチェックをかけ判定したいのですが、 全角ひらがなの判別方法がわかりません。 どなたがご存知の方がいらっしゃれば、ご回答頂けると助かります。

    • ベストアンサー
    • PHP
  • 漢字などを正規表現でパターンマッチさせる方法?

    こんにちは,よろしくお願いします。 名前(姓と名に分けて)を入力してもらうフォームを作っています。 姓名を日本語,つまり,漢字,ひらがな,カタカナを全角(2バイト文字?)で入力してもらいたいと考えています。 ぜんぜんわからないのですが,パターンを次のように考えて, var pattern = "[亜-熙ぁ-んァ-ヶ]+"; if(seimei.match(pattern)){ 上記のようにやってみたらうまくいったように思えましたが,「蓬莱」や「紀香」などの漢字を入力するとマッチしません。 文字セットは”UTF-8”を使っています。 すべての漢字,ひらがな,カタカナをマッチさせるようにするにはどのようなパターンで行えばいいのでしょうか?教えてください。 よろしくお願いします。

  • shift-jisをUTF-8に読み込ませるには?

    shift-jisにてcsv形式で保存しているテキストファイルの配列(カンマ区切りの3番目)から取り出したものをUTF-8にエンコードする方法をご教示賜りたくご質問させて頂きました。 $Pscrtfl = "./datas/pdtscrt.txt"; open (DT,"<$Pscrtfl"); @Pscrt = <DT>; close (DT); foreach $i (@Pscrt){ @iW = split(/\,/,$i); $Pscrtfl = "./datas/pdtscrt.txt のtxtに入ってる3番目のデータを取り出して、それをUTF-8文字コードに 変換して出力させたいと思っております。 現在のところ私のやってみたこと foreach(@Pscrt){ use Encode; Encode::from_to( $_, 'utf8', 'shiftjis' ); $Pscrtfl .= $_; } とエンコードかけてみるんですが。。。。やはりcsvファイルの文字がUTF-8に変更していないのか、 <!doctype html> <html><head><meta charset="UTF-8">でprintしようとすると、やはり文字化けしてしまいます。 これを文字化けしない方法がお分かりの方おられましたら、ぜひご教示下さいませ。

    • ベストアンサー
    • Perl
  • 文字コードの変換(Shift-JISからUTF8)

    文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを 確認するとShift-JISのままです。 どなたか教えていただけないでしょうか? ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; my $input_file="input.csv"; my $output_file="output.txt"; open (IN, $input_file) or die "$!"; open (OUT, ">$output_file") or die "$!"; while (<IN>){ chomp ($_); my @data=split(/,/,$_); for(my $i=0;$i<@data;$i++){ $data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換 $data[$i]=~s/\s+//g; print OUT $_; } print OUT "\n"; } close (IN); close (OUT);

    • ベストアンサー
    • Perl
  • 【Ruby】shift-jisのページの置換

    content="text/html; charset=shift-jis"のページを読み込んで、文字列の置換がしたいです。 #!/opt/local/bin/ruby require 'uri' require 'open-uri' url='http://hoge.hoge' open(url,'r:shift_jis'){|io| content = io.read content.gsub!(/ほげ/,'ホゲホゲ) print content } 上記の様に書いてみました。ソースコード自体はUTF-8で記述しました。 実行すると、 `gsub!': incompatible encoding regexp match (UTF-8 regexp with Shift_JIS string) (Encoding::CompatibilityError) となってしまいます。 どうしたらよいのでしょうか? rubyのバージョンは ruby 2.0.0p353 (2013-11-22 revision 43784) [x86_64-darwin12] です。 以上、よろしくご指導のほど、お願い申し上げます。

    • ベストアンサー
    • Ruby
  • 正規表現について2

    すみません、前回「正規表現について」でお世話になりました者です。 前回の分は解決したのですが、それに関連してもう少し教えてください。 data.txt---------------------------------------- aaabbbccc aaadddccc aaaeeeccc ------------------------------------------------ test.pl----------------------------------------- #!C:\Perl\bin\perl use CGI; my $q = CGI->new; $q->charset('Shift_JIS'); print $q->header(-type => "text/html"); my $line=0; open(IN,"<data.txt"); open(OUT,">output.txt"); while(<IN>){ if ($line++==0){ $output1="$1" if/aaa(.*?)ccc/;} s/aaa(.*)ccc/$1/ if (?aaa(.*)ccc?); print OUT; } close(OUT); close(IN); print $output1; ------------------------------------------------ とすることで、得られたい結果である、 output.txt-------------------------------------- bbb aaadddccc aaaeeeccc ------------------------------------------------ IEでの表示-------------------------------------- bbb ------------------------------------------------ となりました。そこで今回教えていただきたいのは、 data.txt---------------------------------------- <空行> aaabbbccc aaadddccc aaaeeeccc ------------------------------------------------ というようにdata.txtのはじめが空行の場合にも、 上記と同じような結果を得たいです。output.txtの はじめは空行になっても構いません。得られる文字として、上と同じ結果がほしいです。どうしたらよいでしょうか?よろしくお願いします。

    • ベストアンサー
    • Perl
  • Shift_JISデータでPOSTしたいです。

    はじめまして。 よろしくお願いします。 言語はPHPを使用しております。 今回の質問なのですが、UTF-8で作成したページよりデータをShift_JISとしてPOSTしたいと考えております。 いろいろGOOGLEで検索し出てきたのですがどれもダメでした。 <!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title>テストサイト</title> </head> <body> <form action="http://hoge.com" method="post" accept-charset="Shift_JIS"> <? $namec = mb_convert_encoding(mb_convert_kana($name, "S"), "SJIS", "UTF-8")); ?> <input type="hidden" name="bill_name" value="<?= $namec; ?>"> <input type="submit" value="お支払いへ" onclick="org=document.charset; document.charset='Shift-JIS'; document.UserForm.submit(); document.charset=org;"> </form> </body> </html> 上記のようなフォームを作成しています。 http://warumono.at.webry.info/201110/article_9.htmlを参考にやってみたのですがダメでした。 単純にmb_convert_encodingでは相手のサイトで認識してくれず、上記フォームでやっても認識してくれませんでした。 ブラウザはChromでやっています。 もちろんサイトを運営する上でfirefox IE safariは必須かと考えております。 どうぞ知恵を貸していただければと思いますのでよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 正規表現を使った入力値のチェック

    こんにちは、yukimura1024です。 perlでブラウザのフォームに入力された値をチェックしたいのですが、 入力された値が「全角文字のみか」と「全角カタカナのみか」 という2種類のチェックのしかたがわかりません。 「数値のみか」のチェックは正規表現を使ってできたのですが、 これと同じように正規表現を使って、この2つの全角チェックをする 方法はないでしょうか? 数値チェックは以下の方法でやっています↓ if ($str_txt_yuubin =~ /[^0-9]/) { print "「郵便番号」を半角数字で入力してください。<br>\n"; } ご存知の方がいましたら教えていただけると助かります。 よろしくお願い致します。

    • ベストアンサー
    • Perl
  • 正規表現

    質問させていただきます。 文字コード「Shift-JIS」で渡ってきた文字列を 英字とスペースはOKで、 それ以外の文字列が入力されていたら、エラーいう処理を しているのですが、うまくいきません。 ご教授よろしくお願いします。 // 半角にする $kana = mb_convert_kana($_POST['kana'], "r"); if ((ereg("^[a-zA-Z]+$", trim($kana))) == false) {   echo "エラーです"; } 全角スペースと半角スペースと英字はOKで、それ以外はNG としたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう