Unicode
文字プロパティ
八田 昌三 (BPS)
誰?
•

元ローカライズ業界

•

多言語翻訳のチェックを正規表現ツールで行ってい
た
•

特殊な業界知識

•

多言語ドキュメントを正規表現で同時にチェック

•

ヨーロッパ25言語、どんな言語が追加されるかわからない
•

フランス・ドイツ・イタリア・スペイン・オランダ・スウェーデン・
ノルウェー・フィンランド・ポーランド・ギリシャ・ロシア・チェコ・
スロバキア・スロベニア・ルーマニア・ブルガリア・ウクライナ・ア
ラビア・ペルシャ・etc
RubyWorld Conference
2013で発表しました
Unicode
文字プロパティって?
•

正規表現の文字クラス [ ] の中で使える

•

p{ }で囲って指定
!

•

文字プロパティ自体は Unicode Consocium の
正式な規格

•

ただし実装の進み具合はさまざま
公式規格
•

http://www.unicode.org/Public/UNIDATA/
Scripts.txt
記法も実装で異なる
POSIXのじゃだめなの?
•

POSIXの文字クラス[[なんちゃら]]は、実装によっ
て動作が異なる可能性がある
•

•

当時の業務は実装に依存できなかった

Unicode文字プロパティには規格がある
•

以後Ruby2.x系 (Onigumo) で説明
rubular.com
Onigumoで使える文字プロパティ
https://github.com/k-takata/Onigmo/blob/master/doc/UnicodeProps.txt
漢字にマッチする
正規表現
•

伝統的な方法: [一-龠]
•

•

一部の漢字が漏れてる(まず支障はない)

文字プロパティ: [p{Han}]
•

明快、すべての漢字が網羅される
ひらがなにマッチする
正規表現
•

伝統的な方法: [ぁ-ん]
•

•

思い出しにくい

文字プロパティ: [p{Hiragana}]
•

明快
•

でも注意も必要
漢数字にマッチする
正規表現
•

伝統的な方法:
•

[一二三四五六七八九十壱弐参拾百千万萬億兆〇]
!

•

文字プロパティ: さすがにない
カタカナにマッチする
正規表現
•

伝統的な方法: [ァ-ヴ]
!

あれ?
•

文字プロパティ: [p{Katakana}ー]
•

実は音引き「ー」はKatakanaに含まれていない

•

明示的に文字クラスに「ー」を追加する必要がある
数字にマッチする
正規表現
•

伝統的な方法: [0-9], [0123456789]
!

•

文字プロパティ: [p{N}]または[p{Number}]
•

後者はエイリアス

•

明快、と思いきや
•

漢字のゼロ「〇」(マル○ではない)にだけなぜかマッ
チしてしまう

•

規格の方が中途半端
アルファベットにマッチする
正規表現
•

伝統的な方法: [a-zA-Z]

•

文字プロパティ: [p{L}]または[p{Alphabetic}]
•

明快、と思いきや
•

日本語どころかあらゆる言語の文字とマッチしてい
る

•

記号や数字とはマッチしていない
実は
•

「アルファベット」という概念はそもそもABCだけではない

•

文字セットのうち、「数字でなく」「スペースでなく」「記
号でない」ものすべてを指す
•

•

「国語」が国によって指すものが違うのと似ている

だから日本語でも何語でも数字・記号以外のあらゆる文字セッ
トにマッチする

•

これはPOSIXの[[:alpha:]]でも同じ
という具合に

•

実装に依存せず、多言語を串刺しにする正規表現を
作成するうえでUnicode文字プロパティは便利

•

だが動作の検証は欠かせない
•

詳細は TecheRacho にて

•

http://techracho.bpsinc.jp/
hachi8833/2013_09_13/13433
•

ご清聴ありがとうございました

Unicode文字プロパティ