- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perl 5.8.8 日本語マッチ)
perl 5.8.8で日本語マッチができない問題
このQ&Aのポイント
- perl5.8.8を使用している際に、日本語にマッチする正規表現がうまく機能しない問題が発生しています。
- 「さしすせそ」のような日本語文字列を抽出したい場合、正規表現の記述によって期待する結果が得られないことがあります。
- バージョン5.8.8のperlではこの問題が発生するため、バージョンアップができない場合は対処方法を考える必要があります。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
この内容なら、もっと古いバージョンでも動きそうなのですが。 「さ」は、いわゆる「だめ文字」ではないですし。 test.txtとtest.plとで文字コードが違ってたりしませんか? もっと複雑なのになると、このままでは、日本語がバイト毎に分解されて処理されるので、問題になります。 例: 'あい' =~ /^(..)/ は、$1='あい' にならない。$1='あ'の1バイト目 'あ'の2バイト目 になる その場合は、UTF8フラグ付きにencode/decodeして使えば日本語の1文字を「1文字」として扱ってくれます。 5.8.8だと、UTF8フラグ付き文字列も使えるレベルになっていたはずです。
その他の回答 (3)
- kumoz
- ベストアンサー率64% (120/185)
回答No.4
ファイルの文字コードとプログラムの文字コードの不一致が原因だと思います。Encode::Guess モジュールを使えば、文字コードを調べることができます。なお、私の手元にある Linux 上の Perl v5.8.1 でも Encode::Guess は装備済なので、v5.8.8 であれば使えると思います。 use Encode::Guess qw/euc-jp shiftjis 7bit-jis/; ... my $q = Encode::Guess->guess(join('', @file)); print ref($q) ? $q->name : $q; 上記のようなコードを元のプログラムに組み込むと、判別に成功すればファイルの文字コードを表示してくれます。
- fdvk354
- ベストアンサー率0% (0/6)
回答No.2
マッチをさせる前に chomp $line;をしてみてはどうでしょうか?
- Tacosan
- ベストアンサー率23% (3656/15482)
回答No.1
5.8 なら文字コードを適切に設定すればいけるんじゃなかったかなぁ....