CGI-BBS > CGI > Perl > Perlについて「ー」をGrep検索するとエラーする。


カレッヂ
カレッヂ


質問者 くら  投稿日 6/20(金) 20:24:37
$in{'WORD'}に、「ー」の文字が含まれていると
下記のコードがエラーします。

$Word = $in{'WORD'};
@Find_Word_U = grep /$Word/, @DB_Data;

ためしに、このように書くと、文法エラーになります。
@Find_Word_U = grep /ー/, @DB_Data;

どうしたらよいのでしょうか。

よろしくお願いします。

プロバイダ参照:http://www.fsv.jp/
サーバのOS:UNIXサーバ
パソコンのOS:UNIX
エディタ:Perlを始めよう!
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:expert

回答者 しあわせのツボ  [削除]  投稿日 6/20(金) 21:17:41
see log:
http://www.rescue.ne.jp/CGI-BBS/cgi/perl/20030618174253.shtml
質問者 くら  [削除]  投稿日 6/20(金) 21:24:25
これを書かないほうがよかったですね。
> @Find_Word_U = grep /ー/, @DB_Data;

やりたいことは、
@Find_Word = grep /コンピュータ/, @DB_Data;

で、@Find_Wordを表示したいのです。
「ー」を「-」に変換すると、表示時事に「-」を「ー」に戻す必要が発生しますが、
「-」のまま出なければならない文字も「ー」になってしまいます。
そのため、直接、Grepで取り出したいと考えた次第です。

説明不足ですみません。
質問者 くら  [削除]  投稿日 6/20(金) 21:25:28
「コンピュータ」は、あくまでも一例です。
たびたび、すみません。
回答者 しあわせのツボ  [削除]  投稿日 6/20(金) 23:04:57
正規表現中で「ー」を使うための例を挙げたのですが。
/コンピュ\x81\x5bタ/
じゃだめですか、ということです。

もし「変数に任意の文字列があり、それでgrepしたい」のであれば、
quotemeta関数を調べてください。
回答者 おっさん  [削除]  投稿日 6/20(金) 23:26:46
簡単な確認スクリプトを試して見てください。

require 'jcode.pl';

@DB_Data_sjis = ('コンピュータのコンピュータ','コミュニケーション','クーラー');
@DB_Data_euc  = ();

foreach $data (@DB_Data_sjis) {
	&jcode'convert(*data,'euc');
	push (@DB_Data_euc, $data);
}

$in{'WORD'} = "ー"; $Word = $in{'WORD'};
&jcode'convert(*Word,'euc');

@Find_Word_U = grep /$Word/, @DB_Data_euc;

foreach $data(@Find_Word_U) {
	&jcode'convert(*data,'sjis');
	print "$data\n";
}

文字コードをEUCに変換すれば、解決できると思いますよ。
質問者 くら  [削除]  投稿日 6/21(土) 15:39:10
しあわせのツボさん、おっさんさん(?)、ありがとうございます。

quotemeta関数で何とかなりそうです。
でも、麻薬みたいな関数ですね。不用意に使用すると、
あとでとんでもない、しっぺ返しをうけそうです。(^^)

文字コードをEUCに変換しても、よかったのですね。
煮詰まっていると、そんなことさえ、考えが及ばなくなってしまいます。

とにかく、quotemeta関数かEUC変換で、対応できそうです。

中途半端な質問で、ご迷惑かけましたが、お付き合いいただき
ありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技