• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:日本語のマッチング(正規表現))

日本語のマッチング(正規表現)の解決方法

BLUEPIXYの回答

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

>私の環境だとuse encoding "euc-jp";の行で 5.8.7にアップデートしてみましたが、 #1のスクリプトで問題有りませんでした。 INのファイル及びスクリプトが本当にEUCになってますか? エラーメッセージはどのようにでていますか

Achilles1993
質問者

お礼

すぐの返答ありがとうございます。 またの質問になりますがよろしくお願いいたします。

Achilles1993
質問者

補足

INファイル及びスクリプトはEUCになっています。 エラーメッセージは、 Can't locate encoding.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at jisyo01_1.pl line 14. となっています。

関連するQ&A

  • 日本語のマッチング(正規表現)

    Perl5.8.7で日本語のマッチングを行おうとしてます. 文字コードはEUCで,[ト],[ユ],[ャ],[ュ]や[ョ] の後にある[ウ]を[ー(長音)]に変換しようとする ものです. 例.ヒャクトウバン→ヒャクトーバン 自分の考えた正規表現では成功しませんでした. if($b[$i] =~ /[\xa5e6\xa5c9\xa5e3        \xa5e5\xa5e7]\xa5a6/){ $b[$i] =~ s/\xa5a6/\xa1bd/; } 文字コードを直接書く方法しかないのか, 日本語はマッチングできるのかなどわからないので, よろしくお願いいたします.

    • ベストアンサー
    • Perl
  • 正規表現について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
  • Perlを使った正規表現について

    テキストファイルを読み込んで、以下のルールに従った文字列だけを.txtで出力するプログラムを書いています。 具体的にはテキストファイル中の "text":"★★★","to_user" で囲まれている★★★の部分のみを抽出したいです。 そこで正規表現に触りだしたのですが、表現がうまくいっていないようで1週間ほどはまっています。。うまく出力できるように直しをいただけないでしょうか。 打ち明けてしまうと、★★★の部分はtwitterの呟き(日本語)になります。 以下がそのソースになります。よろしくお願いします。 print "Input file name: "; $ifname = <STDIN>; open(IN, $ifname); open(OUT, "> out.txt"); #出力ファイル while(<IN>){ if($ifname =" m/"test":(.*?),"to_user"/; next if($_ eq ""); print OUT "$_\n"; #書き出し } close(OUT); close(IN);

    • ベストアンサー
    • Perl
  • 配列を用いた文字置換

    初投稿です。よろしくお願いいたします。 kana2phone_rule.txtにはア+aという情報が五十音で入っています。01.txt.chaには愛+アイという情報が入っています。 以下のプログラムは01.txt.chaのプラスの後の要素 (アイ)を音表記(ai)に変換するというものです。 しかし変換の作業が行われない(アイ)ままファイルを吐き出してしまいます。 文字コードはEUC、改行コードLFで試しても、Jperlを用いてShift-JIS、CR+LFで試してもだめでした。 どこに問題があるのでしょうか。 分かりましたらよろしくお願いいたします。 open(IN,"kana2phone_rule.txt"); $j = 0; while($b=<IN>){ chomp $b; @list = split(/\+/, "$b"); $kana[$j] = "$list[0]"; $yomi[$j] = "$list[1]"; $j++; } close(IN); open(IN, "01.txt.cha"); open(OUT, "> kekka.txt"); while($a=<IN>){ chomp $a; @list2 = split(/\+/, "$a"); for($i=0; $i<=258; $i++){ $list2[1] = ~s/$kana[$i]/$yomi[$i]/g; } print OUT "$a [$list2[0]] $list2[1]\n"; } close(IN); close(OUT);

    • ベストアンサー
    • Perl
  • ファイル読み込みマッチングについて

    現在二つのファイルをつき合わせて一致しない ファイルを出力するようなものを作っています。 例ですが。 ---a.txtココカラ--- aaa bbb ccc ---ココマデ--- ---b.txtココカラ--- aaa ccc ddd fff ---ココマデ--- 上記ファイルを照らし合わせて 以下のファイルを出力 ---c.txtココカラ--- bbb ---ココマデ--- のように出力させたいのですが。 自分の作成したものは ---a.plココカラ--- open(IN1,"a.txt") || die $!; open(IN2,"b.txt") || die $!; open(OUT,">c.txt") || die $!; sub hikaku { while(<IN2>){ if($a eq $b){ return; } } print OUT "$a"; return; } while(<IN1>){ $a = $_; &hikaku; } close(IN1); close(IN2); close(OUT); ---ココマデ--- いろいろテストをしてわかったことですが サブルーチンの while(<IN2>) そのままに なる一回しか回らないことがわかりました。 これは偽になった後、サブルーチンを抜けまた 回ってきた時に偽と判断されるからでしょうか? プログミング自体始めたばかりなので、こんなん あかんに決まってるやん!とか一からだなこれ!! とか導いていただけるなら厳しいご指摘お待ちして おります。 長くなりましたがよろしくお願い致します!!

    • ベストアンサー
    • Perl
  • いずれかのパターンにマッチング

    はじめまして、初歩的な質問ですがご教授いただければ幸いです。 英文(1文ずつ改行されたもの)から" to "または"by "または" with "を含む文のみを表示する構想のスクリプトを作りましたが、それ以外の関係ない文も出力されてしまいます。 elsif~endまでを取り除くと、to(大文字小文字の区別なし)を含む文のみ出力してくれるのでおそらく悪いのはelsifの所だとは思うのですがなぜこれではだめなのかわかりません。 ほんとに馬鹿な質問ですが教えていただければありがたいです。よろしくお願いします。 a = Array.new   filename = ARGV[0]  file = open(filename) while b = file.gets do    b.chomp!     if b =~ /\s+to\s+/i then      a << b    elsif b =~ /by\s+/i     a << b    else b =~ /\s+with\s+/i     a << b    end end for c in a  puts c end file.close

    • ベストアンサー
    • Ruby
  • 正規表現<置き換え>が実行してくれません

    次のようなスクリプトで、改行マーク\nがたくさんある1行データを<BR>に置換しようとしましたが、表示は\nのままです。原因が分かりません。たぶんこの肝心の箇所のスクリプト・エラーだと思いますが、自分で発見できません。どなたかお教え下さい。 print "Content-type: text/html; charset=sjis-jp\n\n"; print "\n"; print "<HTML>\n"; print "<HEAD>\n"; print "<TITLE></TITLE>\n"; print "</HEAD>\n"; print "<BODY>\n"; # 辞書を読む #ファイルの各行を配列に一括して読み込む。 open(IN, "GermJ.txt"); @list = <IN>; close(IN); $max = $#list; for ($i=0; $i<$max; $i++) {$data = @list[$i]; if (index($data, $tango.' /// ')==0) {$data=~ s/ \n/<BR>/g; print "$data\n"; last; } } print "</BODY>\n"; print "</HTML>\n"; __END__

    • ベストアンサー
    • Perl
  • 正規表現での置き換え

    正規表現で取り込んだテキストファイルの置き換えをしようとしています。 テキストファイルには Vol:down1b (Vol:down1b (F:\download1\sampledata))\sample.jpg Vol:down1b (Vol:down1b (F:\download1\sampledata))\sample2.jpg と入ってます。 Perlのプログラムでは $moto = "Vol:down1b (Vol:down1b (F:\download1";#1の置き換え元 $ato = "down1";#1の置き換え後 $moto = quotemeta($moto); open(IN,"list.txt") || die "ファイルが見つからないので終了します。"; @file=<IN>; for(@file){ $_=~s/$moto/$ato/; } close(IN); print"@file[10]","\n"; と書きましたが、なぜか置き換えがうまくいきません。 $moto変数の中にある(とかの文字があるのがだめなのでしょうか? quotemeta関数でエスケープはつけてるつもりですが・・・ 教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • 正規表現でのエラー

    検索システムを作ろうと思っています。テキストファイル(このソースではgreetings.txtです。)の中にある文章をキーボード入力で1文字でもヒットすれば抜き取って表示させたいのですが、以下のソースをコマンドプロンプトで実験したところ「Q、Y,S,M、と記号」で検索すると全ての文章がヒットしてしまいます。他の文字では問題無くヒットするのですが…。perlを始めてばかりでまだまだわからないことだらけです。いちおう本やネットで検索したんですがさっぱりわかりません。どなたかどうかお力を貸していただけませんか? #!C:\Perl\bin\perl $kensaku = <>; $ans = eval $kensaku; open(IN, "greetings.txt"); while ($line = <IN>){ if($line =~ /$ans/i){ print "$line"; } }

    • ベストアンサー
    • Perl
  • 正規表現で  " ← を削除するには?

    " がある文があって、これを削除したいのですが、 $file="KEN_ALL.csv"; open (IN, $file) or die "$!"; while (<IN>) { $_ =~ s/\"//; print $_; print "<br>"; } close (IN); と書いたのですが、削除できませんでした。「"」はどうやって削除できるんでしょうか?やりたいことは、CSVファイルの各セルの中に「"」がたくさんあって、それを一気に削除したいのです。

    • ベストアンサー
    • Perl