古い記事
ランダムジャンプ
新しい記事
UTF-8 の全角ハイフン(便宜上こう呼びます)を
Perl の正規表現でマッチさせようとしてはまりました。
全角ハイフンってのは「−」です。

やろうとしたことは、テキストファイル(UTF-8)を読み込んで、
その中の全角ハイフンを半角ハイフンに変換するという作業。
Perl スクリプトはこんな感じ。
use utf8;
use open ':utf8';
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";

while (<>) {
  s/\p{Hyphen}/-/g;  # または s/−/-/g;
  print;
}
入力「12−234−5」に対して、
出力「12-234-5」を想定。
しかし一部の全角ハイフンだけが半角に変換されるだけで、
残りはそのままでした。困った、困った。

で、元のテキストファイルの全角ハイフンを「od -t x1」
で見てみると「ef bc 8d」と「e2 88 92」の2種類が混じっていました。
前者は「\p{Hyphen}」にマッチするのですが後者はダメ。
まあ原因は分かったので、前処理でバイナリ置換して解決しました。

まあ、このあたりって Unicode がらみでは常識なんでしょうね。
もっと研鑽せねば。


追記080501: Perl で文字コードと言えば弾さん。
さっそく解決策を頂きました。ありがとうございます!

- 404 Blog Not Found:Unicode - 似た文字同士にご用心
  http://blog.livedoor.jp/dankogai/archives/51043693.html

unicore をあさる技、活用します。


小飼弾のアルファギークに逢って来た

(ref. [2008-04-15-1])
この記事に言及しているこのブログ内の記事