1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

`[:alpha:]` を一般カテゴリで表現したい

Posted at

[:alpha:] を一般カテゴリで表現したい

本記事は Unicode 15.0 に準拠しています。

Unicode 下において、[:alnum:] に含まれるアルファベットは [a-zA-Z0-9] ではなく、そのほか多くの言語の文字が含まれていることはあまりにも有名である (?)

正規表現クラス [:alnum:] の罠 - Qiita

本記事では、想像しているよりも多くの文字が含まれている [:alpha:] ないし [:alnum:][:word:] を一般カテゴリ (General Category) とその他の文字コードとして明らかにしたい。

本記事では、仕様として定義されいていることを示しますが、どうしてそのように定義されたかは明らかにできていません。

[:alnum:][:word:][:alpha:] を内包しているため、まずは [:alpha:] を考える。

[:alpha:] の一般カテゴリ化

[:alpha:] は派生プロパティ (Derived Property) の Alphabetic に割り当てられている。このプロパティの構成要素は次のようになっている。

  • 派生プロパティ
    • Uppercase
    • Lowercase
  • 一般カテゴリ
    • Lt (Titlecase Letter)
    • Lm (Modifier Letter)
    • Lo (Other Letter)
    • Nl (Letter Number)
  • Other_Alphabetic

また、ここに含まれる派生プロパティの UppercaseLowercase も一般カテゴリと Other_Uppercase / Other_Lowercase で構成される。そこで、Alphabetic に関して一般カテゴリで表現すると、次のようなリストで表すことが出来る。

  • 一般カテゴリ
    • Lu (Uppercase Letter)
    • Ll (Lowercase Letter)
    • Lt (Titlecase Letter)
    • Lm (Modifier Letter)
    • Lo (Other Letter)
    • Nl (Letter Number)
  • Other_Alphabetic(Other_Uppercase や Other_Lowercase はここに内包されている)

次の節で Other_Alphabetic に含まれる文字について詳細に示していく。

ちなみに、Other_Uppercase には SoNl からそれぞれの一部、Other_Lowercase には SoNlLoLmMn からそれぞれの一部が含まれている。ここでの Nl は一部の ROMAN NUMERAL のみが対象となっている。

もしも、[:alpha:] について具体的な文字を知りたい場合には、以下を参照すると良い。137,760 のコードポイントを確認することが出来る。

[:alpha:] - Unicode Utilities: UnicodeSet

■ Other_Alphabetic

Other_Alphabetic には次の 3 つの一般カテゴリにおける一部の文字が含まれている。(UnicodeSet Comparison によって比較カウント)

  • Mc (Spacing Mark): 423 (/443) 文字
  • Mn (Nonspacing Mark): 867 (/1839) 文字
  • So (Other Symbol): 130 (/6431) 文字

McMn は結合文字であり、ダイアクリティカルマーク等が含まれている。そのため、ラテン文字系では重要になる。(なぜすべての McMn を含んでいないのかは不明)

ここに含まれている So には次の 5 つの文字種がある。

  • SQUARED LATIN CAPITAL LETTER A-Z (e.g. 🄰)
  • NEGATIVE SQUARED LATIN CAPITAL LETTER A-Z (e.g. 🅰)
  • CIRCLED LATIN SMALL LETTER A-Z (e.g. )
  • CIRCLED LATIN CAPITAL LETTER A-Z (e.g. )
  • NEGATIVE CIRCLED LATIN CAPITAL LETTER A-Z (e.g. 🅐)

四角や円で囲まれる文字は などラテン文字以外にもさまざまな文字がある。(例:日本語における円の囲み文字)これらは Alphabetic に含まれていない。ラテン文字だけが優遇されている理由は分からなかった。

また、以下のような丸括弧で囲まれたラテン文字も Alphabetic に含まれていない。ラテン文字の中でも差別化があるようだ。

  • PARENTHESIZED LATIN SMALL LETTER A-Z (e.g. )
  • PARENTHESIZED LATIN CAPITAL LETTER A-Z (e.g. 🄐)

[:alpha:] を含むプロパティ

[:alpha:] に影響を受けるようなプロパティは以下の 2 つがある。これらについても一般カテゴリで表現することを考えてみたい。

  • [:alnum:]
  • [:word:]

[:alnum:]

[:alnum:][:alpha:][:digit:] で構成されており、[:digit:]Nd に一致している。したがって、[:alnum:] を一般カテゴリで表現すると以下のようになる。

  • 一般カテゴリ
    • Lu (Uppercase Letter)
    • Ll (Lowercase Letter)
    • Lt (Titlecase Letter)
    • Lm (Modifier Letter)
    • Lo (Other Letter)
    • Nl (Letter Number)
    • Nd (Decimal Number)
  • Other_Alphabetic

[:alnum:] に数多くの言語のアルファベットが含まれている他に、Letter Number も含まれている。

[:word:]

[:word:] は次のように構成されている。

  • [:alpha:]
  • [:digit:]
  • 一般カテゴリ
    • Mark
    • Pc (Connector Punctuation)
  • Join_Control

これらを一般カテゴリで表現すると次のようになる。

  • 一般カテゴリ
    • Lu (Uppercase Letter)
    • Ll (Lowercase Letter)
    • Lt (Titlecase Letter)
    • Lm (Modifier Letter)
    • Lo (Other Letter)
    • Nl (Letter Number)
    • Nd (Decimal Number)
    • Mc (Spacing Mark)
    • Me (Enclosing Mark)
    • Mn (Nonspacing Mark)
    • Pc (Connector Punctuation)
  • SQUARED LATIN CAPITAL LETTER A-Z (e.g. 🄰)
  • NEGATIVE SQUARED LATIN CAPITAL LETTER A-Z (e.g. 🅰)
  • CIRCLED LATIN SMALL LETTER A-Z (e.g. )
  • CIRCLED LATIN CAPITAL LETTER A-Z (e.g. )
  • NEGATIVE CIRCLED LATIN CAPITAL LETTER A-Z (e.g. 🅐)
  • U+200C: ZERO WIDTH NON-JOINER
  • U+200D: ZERO WIDTH JOINER

[:alpha:] に含まれていた一部の McMnMark として明示的にすべて含まれているため、Other_Alphabetic は 260 種の So のみとなっている。また、Join_Control はリストの最下に示した 2 つの文字である。

参考

UTS (Unicode Technical Standard) で定義されている。

DerivedCoreProperties.txt の一般カテゴリには L& があるが、これは Lu (Uppercase Letter)、Ll (Lowercase Letter)、Lt (Titlecase Letter) のいずれかを指している。

# 4.2.4 Comments - UAX #44: Unicode Character Database

  • The symbol "L&" indicates characters of General_Category Lu, Ll, or Lt (uppercase, lowercase, or titlecase letter). For example:
    0386          ; Greek # L&       GREEK CAPITAL LETTER ALPHA WITH TONOS
    
    L& as used in these comments is an alias for the derived LC value (cased letter) for the General_Category property, as documented in PropertyValueAliases.txt.

余談

Other_Alphabetic にある一部の Other Symbol の文字がどうして [:alpha:] に含まれているのか不思議だった。歴史的な経緯があるのかもしれないが、これを突き止めるには至らなかった。知っている人がいれば教えてほしい。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?