正規表現は魔法の道具
UNIXの世界で発展してきた正規表現ですが、その便利さ故に魔法の道具と称されていました。
今ではUNIXのみならず、Windows等でも当たり前のように使用できるようになっており、テキストエディタ、メールクライアント等でも対応しているソフトが増えてきました。
実は、CRUD Explorerのクエリーの解析処理の中核は、正規表現で実現しています。
また、CRUD Explorerのフィルタや検索機能の殆どで、正規表現をサポートしています。正規表現を理解することで、CRUD Explorerをより活用することができるのです。
取っ付きづらいと思われがちな正規表現ですが、これを機会に覚えてみてはいかがでしょうか。いろいろな場面で活用できると思います。
正規表現でできること
正規表現でできることは、文字列の検索および置換です。
通常、インターネットで検索するためには、「検索ワード」を指定します。検索エンジンにもよりますが、それほど複雑な検索を行うことはできません。
正規表現では、検索条件として正規化された複雑なパターンを指定することが可能です。
メタキャラクタとリテラル
検索条件として指定する文字列には、通常の文字を意味するリテラルと、特殊な意味を持つ文字のメタキャラクタがあります。
検索条件として「CRUD」を指定した場合、CRUDと完全に一致する部分が適合(マッチ)します。この場合の「CRUD」は、リテラルです。
また、「[0-9]{3}」を指定した場合、数字3桁と一致する部分がマッチします。この検索条件の「[」や「-」、「{」等は特殊な意味を持つ文字で、メタキャラクタと言います。
メタキャラクタを含んだ検索条件は、なにやら呪文のように見えるかもしれませんが、メタキャラクタの組み合わせによって、複雑な検索条件の指定を可能にしています。
エスケープ
検索文字列中の「[」等はメタキャラクタのため、特殊な意味を持ちます。しかし、「[」自体を探したい場合に困ります。メタキャラクタの文字自体にマッチさせたい場合、文字の前に「¥」記号を付けることで検索できるようになります。これをエスケープと呼びます。「¥」自体を検索文字としたい場合、「¥¥」と指定します。(¥は半角で指定してください)
文字クラス
「[]」で囲んだ文字列中の1文字にマッチさせるための条件指定方法です。
「[abc]」はaまたはbまたはcにマッチします。
文字クラスでは、文字コードの範囲指定が可能です。
「[0-9]」は数字の0〜9にマッチします。
「[a-z]」は英小文字のa〜zにマッチします。
「[0-9a-z]」は、数字の0〜9または英小文字のa-zにマッチします。
「[0-9a-zA-Z._]」は、数字の0〜9、英字及び「.」または「_」にマッチします。
否定文字クラス
指定した文字の何れにも含まれない文字にマッチさせたい場合、否定文字クラスを使用します。
否定文字クラスは、「[]」内の先頭に「^」を付けます。
「[^0-9]」は数字以外の文字にマッチします。
「abc[^a-zA-Z]」は、abcの後に英字以外が続く文字列にマッチします。
任意の文字
「.」(ピリオド)は任意の1文字という意味があります。
「123...」は、123の後に任意の3文字が続く文字列にマッチします。
選択
複数の選択肢のいずれかにマッチさせる場合、選択肢を「|」で区切ります。
「top|bottom|left|right」は、「top」または「bottom」、「left」、「right」のいずれかにマッチします。
量指定子
直前のパターンの繰り返しにマッチさせる場合、繰り返しの数を量指定子で表現します。
量指定子には以下の種類があります。
? | 0または1個 |
---|---|
* | 0個以上 |
+ | 1個以上 |
{n} | n個 |
{n,m} | n個からm個 |
{n,} | n個以上 |
「[a-z]+」は1文字以上の英小文字にマッチ。
「https?」は「http」または「https」にマッチ。
位置に対する条件
これまでの条件は、文字に対する条件でした。本項で説明するのは、位置に対する条件となり、理解し難いかもしれません。しかし、正規表現を活用するためには、文字に対する条件と位置に対する条件を組み合わせることにより、的確な条件指定が可能になりますので、確実に理解することをお薦めします。
位置に対する条件には以下の種類があります。
^ | 文字列の先頭 |
---|---|
$ | 文字列の末尾 |
\b | 単語境界 |
\B | 単語境界以外 |
\< | 単語の先頭 |
\> | 単語の末尾 |
「^」は検索対象の文字列の先頭を意味します。
「^[A-Z]{3}[0-9]{2}」は、文字列の先頭から英大文字3桁+数字2桁にマッチします。
「\b」などは単語を意識した条件になります。
「IF」という検索条件で、「SHIFT」を検索すると。SHIFT内のIFの部分がマッチします。「IF」という単語にマッチさせたい場合、「\bIF\b」と指定することで、SHIFTはマッチしなくなります。
グループ化
coming soon...