後者はハイフンでなくてマイナス記号でんがな。
[を] UTF-8 の全角ハイフンが Perl の正規表現にマッチしなくて悩んだで、元のテキストファイルの全角ハイフンを「od -t x1」 で見てみると「ef bc 8d」と「e2 88 92」の2種類が混じっていました。 前者は「\p{Hyphen}」にマッチするのですが後者はダメ。 まあ原因は分かったので、前処理でバイナリ置換して解決しました。
で、紛らわしそうなのを名前のHYPHENとMINUS SIGNでgrepするとこんな感じになる。
egrep '(HYPHEN|MINUS SIGN)' /usr/local/lib/perl5/5.10.0/unicore/Name.pl- | 002D | HYPHEN-MINUS |
---|---|---|
| 00AD | SOFT HYPHEN |
± | 00B1 | PLUS-MINUS SIGN |
˗ | 02D7 | MODIFIER LETTER MINUS SIGN |
̠ | 0320 | COMBINING MINUS SIGN BELOW |
֊ | 058A | ARMENIAN HYPHEN |
᠆ | 1806 | MONGOLIAN TODO SOFT HYPHEN |
‐ | 2010 | HYPHEN |
‑ | 2011 | NON-BREAKING HYPHEN |
‧ | 2027 | HYPHENATION POINT |
⁃ | 2043 | HYPHEN BULLET |
⁒ | 2052 | COMMERCIAL MINUS SIGN |
− | 2212 | MINUS SIGN |
⨩ | 2A29 | MINUS SIGN WITH COMMA ABOVE |
⨪ | 2A2A | MINUS SIGN WITH DOT BELOW |
⨫ | 2A2B | MINUS SIGN WITH FALLING DOTS |
⨬ | 2A2C | MINUS SIGN WITH RISING DOTS |
⨺ | 2A3A | MINUS SIGN IN TRIANGLE |
⩁ | 2A41 | UNION WITH MINUS SIGN |
⸗ | 2E17 | DOUBLE OBLIQUE HYPHEN |
゠ | 30A0 | KATAKANA-HIRAGANA DOUBLE HYPHEN |
﹣ | FE63 | SMALL HYPHEN-MINUS |
- | FF0D | FULLWIDTH HYPHEN-MINUS |
| E002D | TAG HYPHEN-MINUS |
で、本当に紛らわしいのをまとめるとこんな感じになるだろうか。
perl -CIO 's/[\x{02D7}\x{2010}-\x{2012}\x{FE63}\x{FF0D}]/-/g
'
とにかくUnicodeには記号が多い。Glyphを見ただけでは区別がつかないものも多い。こういう時にはPerlのunicore
ディレクトリ以下のファイルは結構役に立つ。
Dan the Man with too Many Characters to Disambiguate
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。