For Gauche 0.9.9


Next: , Previous: , Up: 組み込みライブラリ   [Contents][Index]

6.11 文字集合

Builtin Class: <char-set>

文字の集合を取り扱う、文字集合(キャラクタセット)のクラスです。 Gaucheは文字集合オブジェクトのサポートと、 ある文字がその集合に属するかどうかを調べる手続きを言語組み込みで持っています。

コレクションプロトコル (コレクションフレームワーク参照) を実装しているので、 gauche.collectionで提供される標準のコレクションメソッドが使えます。

<char-set>のインスタンスは文字に関数のように適用することができ、 その文字が文字集合に属するかどうかを判定する述語として機能します。 下記のchar-set-contains?を参照してください。

文字集合に関する他の操作、例えば集合演算などは、SRFI-14モジュール (文字集合ライブラリ参照) で提供されています。

文字セットリテラル

Reader Syntax: #[char-set-spec]

この構文で、リテラル文字集合を記述することができます。 char-set-specには集合に含める文字を列挙します。 次の特殊なシーケンスを含めることができます。

x-y

文字xと文字yの間の文字全て。xyも含みます。 xyよりも内部文字コードで比較して小さくなければなりません。

^

カレットがchar-set-specの最初に来た場合、以降に示される文字集合の 補集合がこの文字集合となります。

\xN;

UnicodeコードポイントがN(16進数表記)の文字。

\s

空白文字(space, newline, tab, form feed, vertical tab, carriage return). 文字セットchar-set:ascii-whitespaceの要素。

\S

空白でない文字。(\sの補集合)

\d

10進数の数字。 文字セットchar-set:ascii-digitの要素。

\D

\dの補集合

\w

単語を構成する文字の集合(#[A-Za-z0-9_])。 文字セットchar-set:ascii-wordの要素。

\W

\Wの補集合

\\

バックスラッシュ文字

\-

マイナス文字

\^

カレット文字

[:alnum:] …

POSIX風文字集合表記。サポートされる名前については下の表を参照してください。 名前は全て小文字でなければなりません。この表記の文字集合はASCII範囲のみを含みます。

[:^alnum:] …

[:alnum:]等の補集合です。

[:ALNUM:] …

POSIX風文字集合表記のGauche拡張。名前は全て大文字でなければなりません。 この表記の文字集合はUnicode全範囲を対象とします。 サポートされる名前については下の表を参照してください。

[:^ALNUM:] …

[:ALNUM:]等の補集合です。

POSIX風文字集合表記で認識される名前は次のとおりです。

:alpha:ASCII alphabets. char-set:ascii-letter, #[A-Za-z]
:alnum:ASCII alphabets and digits. char-set:ascii-letter+digits, #[0-9A-Za-z].
:blank:ASCII blanks. char-set:ascii-blank, tab and space.
:cntrl:ASCII control characters. char-set:ascii-control, U+0000 to U+001f and U+007f.
:digit:ASCII digits. char-set:ascii-digit, #[0-9].
:graph:ASCII graphic characters. char-set:ascii-graphic.
:lower:ASCII lower-case alphabets. char-set:ascii-lower-case, #[a-z].
:print:ASCII printing characters. char-set:ascii-printing.
:punct:ASCII punctuation characters. char-set:ascii-punctuation.
:space:ASCII whitespaces. char-set:ascii-whitespace.
:upper:ASCII upper-case characters. char-set:ascii-upper-case, #[A-Z].
:word:ASCII word characters (not POSIX). char-set:ascii-word, #[0-9A-Za-z_].
:xdigit:Hexadecimal digits. char-set:hex-digit, #[0-9a-fA-F].
:ascii:ASCII characters (not POSIX). char-set:ascii.
:ALPHA:Unicode letters. char-set:letter.
:ALNUM:Unicode letters and digits. char-set:letter+digits.
:BLANK:Unicode blanks. char-set:blank.
:CNTRL:Unicode control characters. char-set:iso-control.
:DIGIT:Unicode digits. char-set:digit.
:GRAPH:Unicode graphic characters. char-set:graphic.
:LOWER:Unicode lower-case letters. char-set:lower-case, #[a-z].
:PRINT:Unicode printing characters. char-set:printing.
:PUNCT:Unicode punctuation characters. char-set:punctuation.
:SPACE:Unicode whitespaces. char-set:whitespace.
:UPPER:Unicode upper-case letters. char-set:upper-case, #[A-Z].
:WORD:Unicode word characters. char-set:word.
:XDIGIT:Hexadecimal digits (same as :xdigit:).

いくつか例を示します。

#[aeiou]     ; 母音文字’a’, ’e’, ’i’, ’o’, ’u’の集合
#[a-zA-Z]    ; アルファベット
#[[:alpha:]] ; アルファベット (POSIX表記)
#[\\\-]      ; バックスラッシュとマイナス文字
#[]          ; 空の文字集合
#[ぁ-ん]     ; 平仮名の集合
#[\x0d;\x0a;\x3000;]  ; リターン, 改行, 全角空白

リテラル文字集合は他のリテラルデータ同様、変更不可です。 変更しようとした場合はエラーが通知されます。

互換性への注: 以前は、\xNN (2桁固定の16進数、終端のセミコロン無し) を文字と認識していました。 例えば#[\x0d\x0a]はリターン文字と改行文字セットを意味していました。 互換性のため、終端のセミコロンが見当たらない場合は古い構文もサポートされます。 しかし曖昧な場合もあります。#[\x0a;]は新しい構文では 改行文字のみのセットですが、古い構文では改行文字とセミコロンになります。

リーダのモードをlegacyにセットすると、常に古い構文で認識されます。 リーダのモードをwarn-legacyにセットすると、 デフォルトと同じように振る舞いますが、古い構文を見つけた場合は警告が出力されます。 詳しくはリーダー字句モードを参照してください。

古い構文と新しい構文の両方で動作するコードが必要な場合は、\uエスケープを 使ってください。

定義済み文字セット

定義済みの文字セットがいくつか提供されています。 R7RS文字セットライブラリで定義されているものも含まれます(R7RS文字セット参照)。 これらの文字セットは変更不可です。

Variable: char-set:letter

[R7RS charset] 文字 (UnicodeカテゴリLuLlLtLmLo)。

Variable: char-set:lower-case
Variable: char-set:upper-case
Variable: char-set:title-case

[R7RS charset] 小文字、大文字、タイトルケース文字 (それぞれ、UnicodeカテゴリLlLuLt)。

Variable: char-set:digit

[R7RS charset] 数字 (UnicodeカテゴリNd)。 これには非ASCIIの数字もたくさん含まれています。 ASCIIの数字(#[0-9])だけが欲しい時はchar-set:ascii-digitを 使ってください。

Variable: char-set:hex-digit

[R7RS charset] 16進数表記に使われる文字、つまり#[0-9A-Fa-f]。 これにはASCII外の文字は含まれません。

Variable: char-set:letter+digit
Variable: char-set:graphic
Variable: char-set:printing

[R7RS charset]

Variable: char-set:whitespace
Variable: char-set:blank

[R7RS charset] Whitespace and blank characters; char-set:whitespace includes #\tab, #\newline, #\u000B (vertical tab), #\page, #\return, and all characters in general category Zs, Zl, Zp, while char-set:blank includes #\tab and all characters in general category Zs. Note that char-set:whitespace is the same set of characters that Scheme reader treats as whitespace characters.

Variable: char-set:iso-control

[R7RS charset] Control characters (Unicode general category Cc).

Variable: char-set:punctuation

[R7RS charset] Punctuation characters (Unicode general category Pc, Pd, Ps, Pe, Pi, Pf and Po).

Variable: char-set:symbol

[R7RS charset] Symbol characters (Unicode general category Sm, Sc, Sk and So).

Variable: char-set:ascii

[R7RS charset] Contains all ASCII characters (U+0000 to U+007f).

Variable: char-set:empty

[R7RS charset] An empty character set.

Variable: char-set:full

[R7RS charset] A character set that includes all characters.

Variable: char-set:word

A word constituent characters. In the current version, it is equivalent to char-set:ascii-word (#[0-9A-Za-z_]) but in future versions we may extend this to other Unicode characters. If you intend to mean ASCII-only words, use char-set:ascii-word.

Variable: char-set:ascii-letter
Variable: char-set:ascii-lower-case
Variable: char-set:ascii-upper-case
Variable: char-set:ascii-digit
Variable: char-set:ascii-letter+digit
Variable: char-set:ascii-graphic
Variable: char-set:ascii-printing
Variable: char-set:ascii-whitespace
Variable: char-set:ascii-blank
Variable: char-set:ascii-control
Variable: char-set:ascii-punctuation
Variable: char-set:ascii-symbol
Variable: char-set:ascii-word

These are intersection of char-set:ascii and the corresponding char set without ascii-. (char-set:ascii-control corresponds to char-set:iso-control).

The \d, \s and \w notation in the char-set literal and regexp literal corresponds to char-set:ascii-digit, char-set:ascii-whitespace, and char-set:ascii-word, respectively (not the Unicode set).

The POSIX character class notation, such as [:alpha:] in char-set literal and regexp literal, refers to these ASCII-only charsets.

Note: We don’t have char-set:ascii-title-case and char-set:ascii-hex-digit. There’s no titlecase letter in ASCII range. And char-set:hex-digit is limited to ASCII by definition.

Variable: char-set:Lu
Variable: char-set:Ll
Variable: char-set:Lt
Variable: char-set:Lm
Variable: char-set:Lo
Variable: char-set:Mn
Variable: char-set:Mc
Variable: char-set:Me
Variable: char-set:Nd
Variable: char-set:Nl
Variable: char-set:No
Variable: char-set:Pc
Variable: char-set:Pd
Variable: char-set:Ps
Variable: char-set:Pe
Variable: char-set:Pi
Variable: char-set:Pf
Variable: char-set:Po
Variable: char-set:Sm
Variable: char-set:Sc
Variable: char-set:Sk
Variable: char-set:So
Variable: char-set:Zs
Variable: char-set:Zl
Variable: char-set:Zp
Variable: char-set:Cc
Variable: char-set:Cf
Variable: char-set:Cs
Variable: char-set:Co
Variable: char-set:Cn

Each character set contains the corresponding Unicode characters with the given general category; e.g. char-set:Lu contains all characters of the general category Lu.

Variable: char-set:L
Variable: char-set:M
Variable: char-set:N
Variable: char-set:P
Variable: char-set:S
Variable: char-set:Z
Variable: char-set:C

Each character set contains the Unicode characters with the general category starting with the letter; e.g. char-set:L is union of char-set:Lu, char-set:Ll, char-set:Lt, char-set:Lm and char-set:Lo.

文字セットの操作

Function: char-set? obj

[SRFI-14] objが文字集合であれば真の値を返します。

Function: char-set-immutable? char-set

char-setが変更不可の文字集合であれば#tを、変更可能な文字集合であれば #fを返します。

Function: char-set-contains? char-set char

[SRFI-14] 文字集合char-setが文字charを含んでいれば真の値を返します。

(char-set-contains? #[a-z] #\y) ⇒ #t
(char-set-contains? #[a-z] #\3) ⇒ #f

(char-set-contains? #[^ABC] #\A) ⇒ #f
(char-set-contains? #[^ABC] #\D) ⇒ #t

(char-set-contains? #[あ-お] #\う) ⇒ #t
(char-set-contains? #[あ-お] #\ぷ) ⇒ #f
Generic application: char-set char

文字集合オブジェクトは文字に適用されると、 (char-set-contains? char-set char) のように振る舞います。

(#[a-z] #\a) ⇒ #t
(#[a-z] #\A) ⇒ #f

(use gauche.collection)
(filter #[a-z] "CharSet") ⇒ (#\h #\a #\r #\e #\t)
Function: char-set char …

[SRFI-14] 文字char … からなる文字集合を作成して返します。

(char-set #\a #\b #\c)   ⇒ #[a-c]
(char-set #\あ #\い #\う) ⇒ #[あいう]
Function: char-set-size char-set

[SRFI-14] 文字セットに含まれる文字数を返します。

gosh> (char-set-size #[])
0
gosh> (char-set-size #[[:alnum:]])
62
Function: char-set-copy char-set

[SRFI-14] char-setのコピーを作って返します。

Function: char-set-complement char-set
Function: char-set-complement! char-set

[SRFI-14] char-setの補集合を返します。上の手続きは常に新たな集合を作って返しますが、 下の手続きは引数を変更して返す可能性があります。


Next: , Previous: , Up: 組み込みライブラリ   [Contents][Index]