Perlで全角文字パターンの削除

[上に] [前に] [次に]
Anemone-fish 1999/10/18(月) 11:43:56
Perlで、全角文字パターン、例えば、
s/[■□▲△●○]*//;
っていうのを処理したいのですが、何か方法があるでしょうか?

テストした限りでは、
s/■//g;
s/●//g;
など、全角1文字は通るようなんですが。
jperlが入ってない環境です。

たこすけ 1999/10/18(月) 15:51:10
#Perlはあまり自信が無いのですが・・・

jcode.plのjcode::trを使うというのはどうでしょう?
#-------------------------------
require 'jcode.pl';
$hoge = "ばいあぐら";   #対象
$from = 'あいうえお';   #パターン
$to = '';   #置き換える文字列
jcode::tr(\$hoge,$from,$to,'d');
print $hoge;
#-------------------------------

↑を実行してみた結果は「ばぐら」が出力されました。

Anemone-fish 1999/10/18(月) 17:47:20
たこすけさん、早速ありがとうございます。
で、上の例だと
$hoge = "ばいあぐら";
の場合はそのまま
ばいあぐら
と表示してほしいんです。(#パターン 外文字が入っているんで)
$hoge = "あえいうえおあお";
なら
NULLになってほしいんです。

たこすけ 1999/10/18(月) 18:46:37
ありゃりゃ勘違い。失礼しました。

↓応急処置です。
#---------------------------------------------------------
require 'jcode.pl';
$hoge = "ばいあぐら";
$fuga = $hoge; # $hoge のコピーを作っておく

$from = 'あいうえお';
$to = '';
jcode::tr(\$hoge,$from,$to,'d');
$hoge = $fuga if($hoge ne ""); #$hoge が空でないなら元に戻す
print $hoge;
#---------------------------------------------------------

ん〜、他にもっと良い方法あるんだろうな・・・多分。

B-Cus 1999/10/18(月) 19:09:27
 s/(■|□|▲|△|●|○)*//;
とか。対象が1文字とかだと、ミスるかもね。置換対象が3文字以上だと
わかっているなら
 s/(■|□|▲|△|●|○){3,}//;
としておくのがよし。

B-Cus 1999/10/18(月) 19:15:12
あ、
 s/^(■|□|▲|△|●|○)*$//;
か。

たこすけ 1999/10/18(月) 19:45:15
>  s/^(■|□|▲|△|●|○)*$//;
自分が如何にアホかを思い知りました。
ゴミな書き込みをしてゴメンナサイ。

Anemone-fish 1999/10/19(火) 10:24:45
> s/^(■|□|▲|△|●|○)*$//;
って書けば分かりやすかったか..... REもPerlといっしょで動けば正解ですね
で、
> s/(■|□|▲|△|●|○){3,}//;
って近いことができそうだったんで、やってみるとエラー
半角でやってもエラー (nested *?+ in regexp...)
ひょっとして、{ }はPerlはサポートしてないか
ありゃ、GNUのsedもエラーにはならないけど、一致しないぞー(win32版) ... 泥沼状態
{ }ってどう書けばいいんでしょ〜
(っていつのまにか、問題が違ってる!)

B-Cus 1999/10/19(火) 13:38:53
- perlのバージョン
- 実際にはどのように書いたのか
- 文字コードは
ってなところでしょう。

Anemone-fish 1999/10/19(火) 18:21:06
ごめんなさい!
s/(■|□|▲|△|●|○)*{3,}//;
って書いてました。(^^;;;;;
頭がごちゃごちゃしているときは、エラーみても理解できなかった。

で、
> s/(■|□|▲|△|●|○){3,}//;
で、うまく処理できそうなのでこれを使わせてもらいます。
B-Cus さん、たこすけ さん、ありがとうございました。

Anemone-fish 1999/10/19(火) 18:21:11
[[解決]]
ごめんなさい!
s/(■|□|▲|△|●|○)*{3,}//;
って書いてました。(^^;;;;;
頭がごちゃごちゃしているときは、エラーみても理解できなかった。

で、
> s/(■|□|▲|△|●|○){3,}//;
で、うまく処理できそうなのでこれを使わせてもらいます。
B-Cus さん、たこすけ さん、ありがとうございました。

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