.htaccess では、一部のディレクティブ(RewriteRule、RewriteCond、Macht の含まれるもの)では正規表現が利用できます。
正規表現とは、プログラミングで使用される、いくつかの文字列を1つの形式で表現する記述方法です。何に使われるかといえば、多くの文字列から必要な文字列を検索して、条件を指定したりする場合です。
プログラミングとかしていても、あまり使わないやつとか、忘れちゃうんですよね。
.htaccess のディレクティブをまとめる前に、基本的な正規表現をまとめてみます。
基本的な正規表現
記号 | 説明 |
---|---|
. | 任意の1文字にマッチ 例)”の.と” なら、”のーと”、”のうと”、”のりと” などがマッチ。 |
^ | ^ に続く文字列が 行の先頭にある場合にマッチ 例)”^本” なら、”本棚”、”本拠” はマッチ。”台本” はマッチしない。 |
$ | $ の前の文字列が 行の文末にある場合マッチ 例)”花$” なら、”生花”、”紅花” はマッチ。”花束” はマッチしない。 |
* | * の前の文字が 0回以上繰り返す場合にマッチ 例)”はー*い” なら、”はい”、”はーい”、”はーーい” などがマッチ。 |
+ | + の前の文字が 1回以上繰り返す場合にマッチ 例)”はー+い” なら、”はーい”、”はーーい” がマッチ。”はい” はマッチしない。 |
? | ? の前の文字が 0個か1個ある場合にマッチ 例)”はー?い” なら、”はい”、”はーい” がマッチ。”はーーい” はマッチしない。 |
| | ~または~(選択肢の区切り目) 例)”小学生|中学生|高校生” なら、この3つの選択肢のいずれかがマッチした場合。 |
[] | 角括弧内の文字のどれか1つにマッチ。 例)[abc123] なら、”a”、”b”、”c”、”1″、”2″、”3″にマッチ。 角括弧内の文字を “-” を使って範囲指定可能 |
[^] | 角括弧内の文字が含まれないものにマッチ 例)[^a-c] なら、”a”、”b”、”c” 以外にマッチ。 |
() | グループ化(文字の集合を1つにまとめて扱う) 例)(一時間)+ なら、”一時間” にマッチ。 |
{} | 直前の文字、またはグループの桁数を指定 例)”あ{3}” なら、”あああ” がマッチ。 “あ{2,3}” なら、”ああ”、”あああ” がマッチ。 “あ{2,}” なら、あを2回以上繰り返すものがマッチ。 |
メタ文字を普通の文字として扱う ” \ “
正規表現の基本として使用される ” . 、^ 、$ 、* 、+ 、? 、| 、[ 、] 、{ 、} ” は、メタ文字と呼ばれ、上記、「基本的な正規表現」でまとめた通り、文字を形式に沿って表現するための意味が与えられています。これらのメタ文字を、普通の文字として扱うには、直前に “ \ ” を記述することで実現します。
記 | 説明 |
---|---|
\ | エスケープ 直後のメタ文字を普通の文字として扱う 例)”2\+3″ の場合、”2+3″ がマッチ。”+” は、「直前の文字が 1回以上繰り返す場合にマッチ」という意味ではなく、普通の文字として扱われる。 |
定義済みの文字クラス
記号 | 説明 |
---|---|
\d | [0-9] 全ての数字 |
\D | [^0-9] 数字以外の全ての文字 |
\s | [\t\f\r\n] 垂直タブ以外のすべての空白文字 |
\S | [^\t\f\r\n] 空白文字以外の全ての文字 |
\w | [a-zA-Z_0-9] アルファベット、アンダーバー、数字 |
\W | [^a-zA-Z_0-9] アルファベット、アンダーバー、数字以外の全ての文字 |
後方参照
正規表現で条件にマッチングした文字または文字列は、変数として格納して、それより後で利用することができます。
後方参照について詳しくはこちら⇒後方参照