人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Active Perlで特定の全角文字列をパターンマッチさせるとエラーが出ます。
例えば「ニュース」という言葉はだめなようで

if( $Mojiretsu =~ /ニュース/ ){

とやるとエラーが出て止まってしまいます。
エラー内容はこういうのです。↓

Unmatched [ in regex; marked by <-- HERE in m/>ニュー <-- HERE ス</a>/ at Test.pl line 17.

どうやったらエラーを出さずに「ニュース」をパターンマッチさせられるでしょうか?




●質問者: uta_at_home
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Active AT Perl regex test
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● z900
●100ポイント

スクリプトの文字コードは何になっているでしょうか?

以下のサンプルスクリプトをUTF-8で保存し実行したところ意図通りに動作しました。

#!/usr/bin/perl
use strict;
use warnings;

my $news = 'ニュース';

if ($news =~ /ニュース/) {
 print "News!!\n";
}
else {
 print "Not match\n";
}

実行結果

C:\>perl -v

This is perl, v5.8.8 built for MSWin32-x86-multi-thread

C:\>perl test.pl
News!!
◎質問者からの返答

文字コードはShift-JISです。

検証までして頂いて、ありがとうございました。

m(_"_)m


2 ● まきのっぴ
●120ポイント ベストアンサー

Shift_JIS バイト列として評価しているために発生しています。

下記のように Shift_JIS バイト列を UTF-8 文字列に decode して評価するようにしたうえ、ソースコードも UTF-8 で保存してください。

例:

use utf8;

use Encode;

(略)

$Mojiretsu = Encode::decode('shiftjis', $Mojiretsu);

if ($Mojiretsu =~ /ニュース/ ){

(略)

}

参考:

Perl 5.8.x における日本語コード変換のメモ

Perl 5.8.x Unicode関連

◎質問者からの返答

内容も対処方法もよくわかりました。

$Mojiretsuには、他のプログラムが出力したファイルから読み込んだ文字列がはいるので、このファイルをUTF-8で吐き出すようにしてもらうのはちょっと難儀だなーと思っていたのですが、教えてもらった方法なら自己解決できそうですね。

ありがとうございました!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ