リスを倒す 『初めてのPHP,MySQL,JavaScript&CSS』

『初めてのPHP,MySQL,JavaScript&CSS』勉強奮闘記

16-3. JavascriptとPHPによる検証とエラー処理③正規表現 その1

部屋が乾燥しまくっていて、喉からから。声が出ない。。。
休みなのに喉痛くてだらだら。保湿器が欲しい...。


1-1. 正規表現


今回はここまで扱ってきたパターンマッチングをさらに詳しく見ていきます。
パターンマッチングは、javascriptでもPHPでもサポートされている正規表現を使って実現されます。
正規表現を使用すると、パターンマッチングのアルゴリズムを1つの式で構成することができます。


1-2. メタ文字によるマッチ


すべての正規表現は、スラッシュ(/)で囲む必要があります。このスラッシュの間では、特定の文字が特別な意味を持ち、これを「メタ文字」といいます。

例として、"Le Guin"という名前が含まれているかどうかを調べたいとします。
しかもこの名前は書く人によって間にスペースがあったりなかったり、晴れたり曇ったりします。また、スペースが不規則に挿入されているなどの理由で以下だとします。

The difficulty of classifying Le Guin's works
(LeGuin(スペースなし)やLeとGuinの間に、いくつスペースが入っているかわからない状態)

こういった場合は、アスタリスクの前にスペースを指定する正規表現で解決できます。
/Le *Guni/

1-3. あいまいな文字マッチング


ドットは改行をのぞくすべての文字にマッチします。たとえば、<で始まり>で終わるhtmlタグを探したいとします。
その場合は以下の方法で行います。

//.は改行以外のすべての単一文字にマッチし
//*は直前の項目(.のこと)をゼロ回以上繰り返す
/<.*>/

ドットは改行以外のすべての文字にマッチし、プラス記号はその対象を1個以上の文字に拡大するので、この正規表現は"<と>の間に少なくとも1個文字が含まれている限り、すべてにマッチする"という意味になり、<em>と</em>、<h1>と</h1>、<a href...>のような属性値を持つタグにマッチします。

1-4.かっこを使ったグループ化


キロ(1,000、10の3乗)やメガ(100万、10の6乗)、ギガ(10億、10の9乗)、テラ(1兆、10の12乗)など、3桁ずつ大きくなる数字の単語にマッチさせたいとします。
言い方を変えると、マッチさせたいのは次の文字です。

1,000
1,000,000
1,000,000,000
1,000,000,000,000
...

ここでもプラス記号が使用できますが、ストリングの".000"をグループ化する必要があります。このグループ化によってプラス記号はその全体にマッチするようになります。正規表現には次のものを使用します。

//+で(,000)を1回以上繰り返す、+の後にスペースあり
/1(,000)+/

このかっこは、"プラス記号などが適用されたときにカッコ内をグループとして扱う"ということを意味します。1,00,000や1,000,00はマッチしません。

1-5.文字クラス


ドットほど大まかではない、あいまいなマッチングを行いたい場合があります。あいまいさは正規表現の強力な武器で、その精度はどのようにでも変えることができます。
あいまいなマッチングのサポートは角かっこの持つ機能の1つです。角かっこを使用すると、中に置いた複数の文字を任意の1文字としてマッチさせることができます。複数の文字のどれか1文字がテキストに含まれているとそのテキストはmっちします。

//"gray"と"grey"両方にマッチ
/gr[ae]y/

また、角かっこ内ではハイフンを使って範囲を示すことができます。
よく行われる作業に1桁(10未満の数字)のマッチングがありますが、これは次のように範囲を指定すると簡単になります。

/[0-9]/

桁は正規表現でよく使用される要素なので、桁を表すための\dというショートカットが提供されています。\dは正規表現の中に置くと、1桁にマッチさせることができます。

/\d/

いじょーーー。