.Water-Sunlight
.サイトメニュー
.検索
.オンライン状況
登録ユーザ: 0
ゲスト: 2
.
<< Prev
ereg系の正規表現
« INDEX »
PHP 文法編
Next >>
正規表現関数(ereg系)
作成日: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幅表明です。
<< Prev
ereg系の正規表現
« INDEX »>
Page Top
Next >>
正規表現関数(ereg系)

.