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

正規表現で日本語文字化け

このQ&Aのポイント
  • winxpでrubyの勉強をしていますが、正規表現により分割した日本語の文字列を処理するときにどうしても文字化けしてしまいます。
  • 環境はwinxp pro,activeruby 1.8.6, RDE 1.1.1.1です。
  • 正規表現で名前と金額を別々の配列に格納していますが、日本語の文字列が文字化けしてしまいます。$KCODE=Ksを記載し、SJISのファイルを使用しています。どのような点に留意すればよいのか、認識に間違いがあるかご指摘ください。

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

  • ベストアンサー
noname#60065
noname#60065
回答No.3

>if /(\w+)\s+(\d+)/e =~line このeはeucのeです。 これを付けると$KCODEの値に関係なくeucとして扱われてしまいます。 参考URLのオンラインリファレンスをお読みください。

参考URL:
http://www.ruby-lang.org/ja/man/html/_A5EAA5C6A5E9A5EB.html#a.c0.b5.b5.ac.c9.bd.b8.bd.a5.ea.a5.c6.a5.e9.a5.eb
51gk
質問者

お礼

ありがとうございます。 正規表現部分はサンプルコードをそのまま打っており、 全く気がつきませんでした($KCODEの指定以外の理由が 思いつきませんでした) ご丁寧にありがとうございます

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

#!/usr/bin/ruby -Ks i = 0 menu = Array.new price = Array.new DATA.each do |line| if line.match(/(\w+)\s+(\d+)/) menu[i] = $1 price[i] = $2 i += 1 end end p menu p price __END__ 蛸 110円 烏賊 130円 実行結果: >ruby186 -v okwave.rb ruby 1.8.6 (2007-03-13 patchlevel 0) [i386-mswin32] ["蛸", "烏賊"] ["110", "130"]

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

>if /(\w+)\s+(\d+)/e =~line なんで e をつけてるの?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ソースで日本語を文字化けさせるには。。?

    ブラウザの編集→ソース表示 から HTMLのソースを表示した際に、日本語の部分を文字化けさせたいのですが。 方法は metaタグを charaset=EUC-JP にするだけで良いのでしょうか? これを自分のサイトでやってみたところ、ソース表示でソースを見てみても 日本語部分が文字化けさせず普通に読めました・・。 作った本人なので文字化けしないなどではないですよね。。 お知りの方 よろしくお願いします。 

  • 正規表現について教えてください

    こんにちは。 PHPの正規表現を使用して、あるサイトのhtmlソースから特定のタグ間にある文字を抜き取りたいです。 例えば、下記の場合9を抜き取りたいです。 <div class="a">9</div> この場合の処理方法を教えてください。

    • 締切済み
    • PHP
  • Dreamweaverで文字化け!

    教えてください。困っています。 昨日やっとのことで作ったファイルが、今日修正をかけようと思いDreamweaver4で開けてみると、文字化けしてしまってめちゃくちゃになったいました。ファイルは2つ作ったのですが、1つだけがおかしくなっています。 デスクトップ上からダブルクリックでファイルを開くと、正常ですが、Dreamweaver4で開けると文字化けしています。ソースを見るとソースも文字入力した部分が文字化けしています。F12を押してブラウザで見てみると中国語みたいになっています。ど~したらいいのでしょうか。教えてください。

  • |。ってなんですか? 正規表現

    正規表現の学習中です。読んでいる本の中に次の式がありました。  (?<=^|。)[^。]+。 日本語の文章の中から一文を抽出するための正規表現です。  。以外の文字がダーッと連なった後に。が来る文字列 とのことです。  [^。]は。以外の文字  +はそれが1個以上ある ですから  [^。]+ は  。以外の文字が1個以上ある という意味です。 その後に。が付きますから、  [^。]+。 だけで  。以外の文字がダーッと連なった後に。が来る文字列 ということになります。 では  (?<=^|。) の意味は何でしょう。  (?<=なんたら) は後方参照を意味しますから、 ^|。 のすぐ後に [^。]+ が続くと言いたいのでしょうか。 だとすると  ^|。 が問題です。  ^もしくは。 という意味なら、^は正規表現で記号として使われている文字ですから、  \^|。 と表現されそうなものです。 それに、。は文末でしか利用されない文字ですから、これに注目して検索を行うというのは理解できますが、^は日本語でなんら特徴を持つ文字ではありません。  ^もしくは。 という理解は間違いでしょう。 それでは^を記号として考えるとして、その前後を[]で囲んでいないから、この^は文字列の先頭を表すのでしょうか。そうすると件の正規表現は  先頭の|。のすぐ後から。以外の文字が連なった後に。が来る文字列 という意味になります。日本語の一文を抽出する正規表現という解説にかなり近づいてはいます。 しかし  |。 とは一体何? |はorを意味する記号ですが、  何とか or 。 という意味でしょうか。 でも「何とか」は「何とか」なりに何か文字表現がなされていても良さそうですし、それに  先頭の「何とか」または。のすぐ後から・・・ という解釈は意味不明。  |。 はどのように解釈すべきなのでしょうか。 お手数をお掛けします。

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

    正規表現で 数値と半角記号(!#$%()~|-^@[;],./`{+*}_)が入っているというものを表現したいのですが、、、 下記のような正規表現をすると、エラーになってしまいます。何かよい方法はありませんか? ^[a-zA-Z0-9\-_!#$%()~|-^@[;],./`{+*}_]*$ 又、携帯電話のチェックをしたいのですが、 1文字以上の文字列があってというような処理にしたいのですが、何かよい方法はないでしょうか? ereg( "@docomo\.ne\.jp$", $email )

    • ベストアンサー
    • PHP
  • 正規表現:  (111)-(222)-(333)

    正規表現:  (111)-(222)-(333) から (333)を取得したいと考えています。 ()で囲まれた数字のうち、最後のものを取得するというもので、 この、最後のという考えを実装することができずに困っています。 なぜ最後にこだわるかというと、以下のような例があるからです。 ◆ (111)english(222) ◆ (111)日本語(222)日本語 文字列中に含まれる()で囲まれた数字のうち、最後のものを取得する正規表現を教えてください。

  • 正規表現

    正規表現について勉強中です。 先頭2文字をたとえばYQで入力させたい場合は どうマッチさせればよいのでしょうか? if string.match(/^YQ|[0-9]/) == null { nullの場合の処理 } としていますが、うまくいきません。 正規表現についてはまったくの初心者ですので、 笑わないでくださいね。

  • ActivePerl5.8で日本語を使いたい

    ActivePerl5.8の日本語処理で困っています。 EUCで書かれたのHTMLファイルに、タグの修正などの文字列処理をしているのですが、 *その結果をshift-jisで出力したい。 *コマンドライン上の文字も文字化けさせずに表示したい というあたりで困っています。 use encoding 'shiftjis'; binmode STDERR, ':encoding(shiftjis)'; という記述を書けばOKという記述を見たため試したのですが、うまく動きません。記述を外して、ソースをeucで書くと、コマンドライン表示以外はうまく動くのですが、他の組み合わせですと、日本語の文字処理がうまく行かかかったり、perl自体が落ちたりと、試行錯誤の連続です。 文字処理というのは例えば、以下のような感じです。 print $mytitle; if ($mytitle =~/(【.*?】)/){ $subtitle = "<div class=\"head2\">$1<\/div>\n"; } (【】で囲んだ文字だけに特定のスタイルを効かせる。) 文字列処理とコマンドラインも文字化けの双方を解決させる手立てを教えて頂ければと思います。 よろしくお願いします。

  • split() 正規表現

    正規表現で / (スラッシュ) .(ドット)にマッチ 正規表現により文字列を分割し、配列に格納する split("[/\.]" $v)としていましたが split関数が使えなくなるので、変わりの方法を考えていますが preg_split()などではうまくいきませんでした。 何か方法を教えて下さい。

    • ベストアンサー
    • PHP
  • 文字化け

    現在、WinXPの英語版を使っています。日本語のソフトを使いたくて、インストールしたんですが、文字化けしてて全く文字が読めません。英語版でも日本語のソフトを使えるような文字化けを直してくれるフリーのソフトウェアはあるでしょうか?困っていますよろしくお願いします。