日本語の処理の方法は??

[上に] [前に] [次に]
りょぢぃー [E-Mail] [HomePage] 1998/03/12(木) 10:21:05
CGIにおける日本語の処理に関しての質問です。

「ある文字列が平仮名ばかりだったら」といった記述をperlで
できるのでしょうか??(^^;)

またたとえば、$cgi =~ s/ー//g;
などのように「ー」を使うとうまく置換が行えないのですが
解決方法はありますか??

miyasiro 1998/03/12(木) 14:05:32
Shift-JISでの話しですよね。
一番簡単なのはEUCにすることだと思います。
Shift-JISでやる場合には、2バイト目が \ や @ や正規表現のメタキャラクタになる文字で問題が生じます。単なる文字列として利用するには、\ と @ のみが問題となるので、シングルクオートで囲めば大丈夫です。でも、正規表現として使う場合には厄介です。例えば、$cgi =~ s/ー//g; は、$cgi =~ s/\x81\[//g; とする必要があります。

「ある文字列が平仮名ばかりだったら」の件は、ご質問の意味が分かりませんでした。

sekikawa [E-Mail] [HomePage] 1998/03/12(木) 16:28:34
Perlは全くの初心者ですが...
(自分の勉強のために口をつっこんでるだけなんですけど)

「ある文字列が平仮名ばかりだったら」は
「もしも平仮名以外が見つかったら」と考えてパターンマッチを
行うというのはどうでしょう?

miyasiro 1998/03/12(木) 18:04:21
あっそうか、なるほど、こちらもパターンマッチの話でしたか…
最近(前から?)ちょっと脳ミソの調子が悪いみたいなので、気が付きませんでした(^^;)。ありがとうございます。>sekikawa さん
Shift-JISに限れば、m/^(\x82[\x9f-\xf1])+$/ とするのが一番簡単かな…

>「もしも平仮名以外が見つかったら」と考えてパターンマッチを
今回の場合は、平仮名以外の文字の方が圧倒的に多いので、これを全部指定するのが面倒になるような気がします。それとも、何かいい案があります?

B-Cus 1998/03/12(木) 21:31:43
この前の話に出ていた jcode'tr などを使って、
 $str =~ s/あ-ん//g; (のようなことをjcode'trでやる)
として、その後
 if ( $str ne "" ){
  あ-ん以外の文字が残っている=平仮名以外が見つかった。
 }
とするのはどうでしょうか。例によって例のごとく試してませんけど(^^;

miyasiro 1998/03/12(木) 22:07:31
しまった〜ぁ! jcode'tr は頭をよぎったのに、即、却下してしまった(^^;)
'd' option をサポートしてるってのも読んでたのにぃ…

とにかく、B-Cus さんの jcode.pl を使う方法なら文字コードに依存しない
ようにすることも可能です。

りょぢぃー [E-Mail] [HomePage] 1998/03/13(金) 22:41:37
[[解決]]
大変ありがとうございました♪
"しりとり"のCGIを作っていての質問でした。
目的のことはできたので大変感謝しています(笑)

ところで「ー」が「\x81[」に対応(?)するっていうのは
どうやってわかるのでしょうか??

miyasiro 1998/03/14(土) 02:33:33
"ー" → "\x81\x5b" は、Shift-JIS コード表を見る
"\x5b" → "[" は、ASCII コード表を見る
でしょか…
うちの場合は、WZ Editor にカットアンドペーストして「バイナリ編集」に切り替えて見ています。

[上に] [前に] [次に]