作成日:2006/05/10
1J.3 POSIX文字クラス
以下にPOSIX文字クラスの一覧を挙げます。PerlやPCREなどでは独自の拡張があります。
| クラス名 | 意味 | 同等な表現 | PCRE |
|---|---|---|---|
[:alnum:] |
アルファベットと数字(英数字) | [0-9a-zA-Z] | |
[:alpha:] |
アルファベット | [a-zA-Z] | |
[:blank:] |
空白文字(スペース、タブ等) ※処理系によりこれ以外の文字を含めて良い事になっています |
[ \t] | |
[:cntrl:] |
制御文字 ※通常、アスキーコード0x1F以下の文字 |
[^[:print:]] | |
[:digit:] |
数字 | [0-9] | \d |
[:graph:] |
印字可能で表示可能な文字 ※通常、英数字と記号(空白は印字可能だが表示可能ではない) |
||
[:lower:] |
アルファベットの小文字 | [a-z] | |
[:print:] |
印字可能な文字 ※通常、制御文字以外 |
[^[:cntrl:]] | |
[:punct:] |
句読点 ※通常、英数字、制御文字、空白文字以外の記号文字 |
||
[:space:] |
空白文字(スペース、タブ、改行、改頁) | [ \t\n\r\x0c] | \s |
[:upper:] |
アルファベットの大文字 | [A-Z] | |
[:word:] |
英数字とアンダーライン ※PCRE(preg系関数)でのみ使用可(Perl独自の拡張) [:word:] はPOSIX 1003.2に定義されていません。 |
[[:alnum:]_] | \w |
[:xdigit:] |
16進数 | [0-9a-fA-F] |
上表の「同等な表現」は、筆者の実験によるものです。
また、マルチバイト文字ではより多くの文字にマッチします。
上の文字クラスを正規表現の中で使用するときには[[:alnum:]]のような形になります。 また、Perl や PCRE (preg系関数) では、これらの文字クラスの否定形として[[:^alnum:]]のような記述ができますが、 ereg系関数ではできません。このような場合、ereg系関数では[^[:alnum:]] と記述します。
用例:
ereg("^[:space:]+",$str); # NG! 誤った書き方
ereg("^[[:space:]]+",$str); # 先頭の空白文字にマッチ
ereg("[^[:digit:]]+",$str); # 数字以外にマッチ
preg系関数での独自の拡張
preg系関数では、POSIX 1003.2を拡張した以下の2つの文字クラスがあります。 他の正規表現エンジンとの互換性を確保したい場合は、使用に注意が必要です。
| クラス名 | 説明 |
|---|---|
[:<:] |
単語境界の先頭にマッチします。 |
[:>:] |
単語境界の末尾にマッチします。 |
※これらの文字クラスは、単語の前後にあるヌル文字にマッチします。
※ここでの単語とは、英数字とアンダーライン(即ち、[[:alnum:]_] )を意味します。
※PCREでは前後の単語境界を\bで表記します。
用例:
ereg("[[:<:]]ing[[:>:]]","string ing"); # ing にマッチします
ereg("[[:<:]].+[[:>:]]","Fred is Great"; # Fred is Great にマッチします(最長マッチ)
ereg("[[:<:]][[:alnum:]_]+[[:>:]]","Fred is Great"); # Fred にマッチします
preg_match("/\b.+\b/","Fred is Great."); # Fred is Great にマッチします(最長マッチ)
preg_match("/\b.+?\b/","Fred is Great."); # Fred にマッチします
#(PCREでは最短マッチが使えます)
- ヌル文字へのマッチ(0幅表明)
- 正規表現では文字を消費せずヌル文字にマッチする事を「0幅表明」と言います。 また、これは「アンカー」とも呼ばれてます。文字列先頭を表す ^ や 末尾を表す $ も 0幅表明です。
