Active Perlで特定の全角文字列をパターンマッチさせるとエラーが出ます。

例えば「ニュース」という言葉はだめなようで

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

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

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

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


回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/02/29 12:20:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:pmakino No.2

回答回数358ベストアンサー獲得回数30

ポイント120pt

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関連

id:uta_at_home

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

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

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

2008/02/29 12:18:47

その他の回答1件)

id:z900 No.1

回答回数17ベストアンサー獲得回数1

ポイント100pt

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

以下のサンプルスクリプトを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!!
id:uta_at_home

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

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

m(_"_)m

2008/02/29 12:15:56
id:pmakino No.2

回答回数358ベストアンサー獲得回数30ここでベストアンサー

ポイント120pt

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関連

id:uta_at_home

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

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

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

2008/02/29 12:18:47

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 16:52 Perl 5.8.x Unicode関連 (delicious) 日本語の文字コードでつまづいている。 perldoc perluniintro. UTF8フラグとは。I/Oでの文字コード指定。 via http://q.hatena.ne.jp/1204220879 (2010-06-01T16:52:07+0900) 16:57 Perlに
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません