- ベストアンサー
正規表現で、全角文字を半角文字にする方法
エディター等で使用できる、通常の正規表現で、例えば、全角文字を半角文字にする方法はありますでしょうか? ※つまり、PerlのtrやPHPのstrtrのようなことです。 例えば、正規表現対応のエディターで、サイト全体の全角英数字を半角英数字にするような処理をしたいのですが。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> つまり、正規表現で、 > $str =~ tr/a-zA-Z/a-zA-Z/; > が出来るでしょうか? 考え方だけ。 my %tbl = ('A' => 'A', 'B' => 'B', ... 'z' => 'z'); $str =~ s/([A-Za-z])/$tbl{$1}/ge; こんな感じにいちいちテーブル参照すれば正規表現の置換でできます。 PHPにも置換を行うときに関数を呼び出せるのがあったと思うので それを使えば同様のことができるはずです。 エディタの置換機能だとこういうのを持っているのはEmacsくらい?
その他の回答 (3)
- moon_night
- ベストアンサー率32% (598/1831)
>5000ファイルを処理する時 エディタを使うよりも素直にPerlでやったほうが早いんじゃない?
お礼
ありがとうございます。 Perl使えばなんでもできちゃいます。 Perlがインストールされていない環境で、この処理をしたかったので。
- shimix
- ベストアンサー率54% (865/1590)
私の愛用のsakuraエディタにもあります>変換機能。全角カタカナだけとか全角英数のみとか指定もいろいろできるようになってます。
お礼
ご回答ありがとうございます。 申し訳ありません。私のエディター(EmEditor)にもあります。ただし、開いているファイルにしか使えないので、5000ファイルを処理する時、5000回繰り返さなければなりません。 grep置換対応なら、その必要はないと思ったのですが、よく考えてみたら、このような処理は正規表現でできないから、変換機能みたいなものが実装されているのですね。 よく考えてみたら、正規表現でできないから、trやstrtrがあるのですかね。
- sakusaker7
- ベストアンサー率62% (800/1280)
お望みの動作は文字ごとの一対一の置き換えですから、 わざわざ正規表現を使うことはないと思います。つか使ったほうが面倒でしょう。 tr なんかも入力として受け付けるのは正規表現じゃないですよ。 秀丸とxyzzyだとエディタのメニューに、全角→半角(あるいはその逆)の 項目があったりします。 たぶん他にもそういう機能をもったエディタはあると思います。
補足
ご回答ありがとうございます。 失礼しました。私の使用しているエディターにも、全角半角変換機能があります。 「どんな方法でもいいので処理したい」ではなく、「正規表現で処理したい」のです。環境(OSやエディタ)が変わっても、同様のことがしたいので。 > tr なんかも入力として受け付けるのは正規表現じゃないですよ。 確かに。一見文字クラスに見えますが、正規表現の文字クラスというわけではないのですね。PHPのstrtrも。 つまり、正規表現で、 $str =~ tr/a-zA-Z/a-zA-Z/; が出来るでしょうか? 出来るはずないと思うのですが、念のため・・・。
お礼
ご回答ありがとうございます。 > エディタの置換機能だとこういうのを持っているのはEmacsくらい? この回答を待ってました。viとかCUIのエディタならできるでしょうね。 つまり、Perl で言うところの、/e (←式を評価する)見たいな事を普通のエディタでやりたかったんですが、その場合、式を記憶させるフィールドが必要なので、出来るはずないですね。 納得しました。