メールアドレスのフォーマットチェック をPHPでしたくていろいろ見ていてよく見かける言葉。聞いたことがあるけど知らないじゃ済まされなくなる前に調べて記録しておく。
POSIXは、UNIX系OS間の移植性を確保するための広範囲にわたる標準規格
- 英語 : Portable(移植できる) operating system interface
- 読み方 : ポジックス
- WindowsなどUNIX系以外のOSでも部分的にサポートしている
正規表現と正規表現を使うツールのを扱った部分がPOSIXには含まれている。
なので別に正規表現のための規格っていうわけではない。
コマンドなんかも含まれている。
POSIXでは正規表現の各種方言を基本正規表現と拡張正規表現の2つに分類している。
基本正規表現 : BRE
- 英語 : Basic Regular Expressions
9.3.1 BREs Matching a Single Character or Collating Element
A BRE ordinary(普通の) character, a special character preceded(先立って) by a , or a shall match a single character. A bracket expression(ブラケット表現) shall match a single character or a single collating(照合する) element.
ブラケット表現は、複数の文字の中のいずれか1文字を表す表現
- bracketは、
[
と]
のこと - ブラケット表現はこんな感じ
拡張正規表現 : ERE
- 英語 : Extended Regular Expressions
9.4.1 EREs Matching a Single Character or Collating Element
An ERE ordinary character, a special character preceded by a or a shall match a single character. A bracket expression shall match a single character or a single collating element. An ERE matching a single character enclosed(囲む) in parentheses(丸かっこ) shall match the same as the ERE without parentheses would have matched.
BREとEREの違い
正規表現の機能 | BRE | ERE |
---|---|---|
.``^``$``[...]``[^...] |
.``^``$``[...]``[^...] |
.``^``$``[...]``[^...] |
0から任意個を表す量子定子 | * | * |
+``? 量子定子 |
ない | +``? |
範囲の表現 | {min,max} | {min,max} |
または(or)の表現 | ない | | |
ローケルは、正規表現に影響を与えます。
ローケルは、日付・時刻・単位・コード体系における文字の解釈法など、言語・文化的な習慣を記述する各種設定のコレクションである。
このローケルが影響を与えるものの1つが/w
(単語を構成する文字)である。
多くの方言では、 \w
は [a-zA-Z0-9_]
と同じである。(_
は含まないこともある。)
が、PHPにおいては(他はわからないけど)
uパターン修飾子によるUTF-8の場合であっても \w
はASCII文字にしか対応していない。
Unicodeで指定できるすべての文字を表したい場合は、\pL``\pN``\pZ
をuパターン修飾子と併せて使う。
PHPのUnicode 文字プロパティ
(フォーマット)\p{プロパティ文字}
: (意味)プロパティを持つ文字
プロパティ | マッチするもの |
---|---|
L | アルファベット |
N | 数字 |
Z | 区切り文字 |
PCREは、NFAベースの正規表現ライブラリ
- 英語 : Perl Compatible(両立できる) Regular Expressions
- 読み方 : ペクル
- イギリスのPhilip Hazelさんが書いたPerl5互換の正規表現ライブラリ
NFAは、「全米先物協会」ではなく「非決定性有限オートマトン」です。
PHPのpregで使われています。
POSIX準拠のereg関連スイートに苛立ったAndrei ZmievskiさんがPHPに入れたそうです。
出展
注意
私は、英語も日本語も弱いので100%確実な情報を得るには原文を読んでください。