【正規表現の研究】 サーバー運営に役立つ正規表現の書き方のルールをまとめた

正規表現を覚えると「.htaccess」ファイルの編集だけでなく、レンタルサーバーを運用していく中で、様々な場面で役に立ちます。

たとえば、

cronの設定

  • スクリプトの作成
  • コマンドの実行
  • 設定ファイル(xxx.confファイル等)の設定

など、様々な場面で使います。(使えます)

正規表現とは何か?

正規表現とは、文字列を操作する様々なパターンを表現する方法です。

 

例えば、

  • ある文字列に特定の文字列が含まれているかを調べる
  • ある文字列に特定の文字列が含まれていないことを調べる

など、「パターンマッチング」を実現する方法です。

 

例えば正規表現を活用することで

  • 「1234567890」という文字列があり、その中から「567」という並びがあるかどうか?
  • あるWebサイトのページに「割引」という文字列が含まれているか?含まれているとしたら何個含まれているか?
  • あるWebサイトのページに「03-xxxx-xxxx」の電話番号と「06-xxxx-xxxx」の電話番号が含まれているか?

などを調べることができます(正規表現で表現することができます)。

 

正規表現の場合は、説明は簡単にして実際にどのように使うのか?例をたくさん挙げて実際に使ってみるのが一番の早道です。

.htaccess の RewriteEngine の例で解説

実際に「.htaccess」の「RewriteEngine」の例で解説します。

まずは、以下の記事にあるように「http」アクセスを「https」に変換する場合です。

 

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 

RewriteRuleの構文ですが、以下のようになっています。

RewriteRule [ここにアクセスしたら] [このようにリライトする] [どんなふうに]

【例】

RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

^(.*)$ →すべてのアクセスに対して

https://%{HTTP_HOST}%{REQUEST_URI} →https形式で

[R=301,L] →301リダイレクトする

という意味です。

 

※すべてのアクセスに対してリライトすると無限ループする可能性があるのでは?と思うかもしれませんが、「RewriteCond」で「HTTPアクセスのみ」と条件指定しているので、「http→https」にリライトされるだけで無限ループは発生しません。

ただし、この「^(.*)$」のように「すべてのアクセスに対して」というような設定は、無限ループを引き起こす原因になるので注意しましょう。

 

この「^(.*)$」を分析すると

^ → 検索対象の始まり

() → サブパターン

. → 改行を除くすべての1文字にマッチ

* → 0回以上の繰り返し

$ → 検索対象の終わり

です。

 

つまり、「検索対象の始まりが、改行以外ですべての文字に対して0回以上繰り返している文字列」という意味です。

つまり、「どんな文字列でも」という意味です。

「http」で始まる(RewriteCond %{HTTPS} off)文字列なら、すべて正規表現の対象になる(パターンマッチングしている)ということです。

正規表現のメタ文字まとめ

基本的なメタ文字についてまとめます。

\ (バックスラッシュ/エスケープ/円マーク)

エスケープ文字

^ (カレット/キャレット)

行の始まり

検索対象の始まり

$ (ドル)

行の終わり

検索対処の終わり

. (ドット)

 改行を除くすべての1文字にマッチ

[ (ブラケット/左大括弧)

文字クラス定義の開始

] (ブラケット/右大括弧)

文字クラス定義の終了

| (パイプ)

選択枝の開始

( (左小括弧)

サブパターンの開始

) (右小括弧)

サブパターンの終了

? (はてなマーク)

0回か1回マッチ

* (アスタリスク)

0回以上の繰り返し

+ (プラス)

1回以上の繰り返し

{ (左中括弧)

最小/最大を指定する量子停止の開始

} (右中括弧)

最小/最大を指定する量子停止の終了

- (ハイフン)

文字の範囲指定

最後に

正規表現は奥が深いです。

しかし正規表現を活用できれば様々な作業が効率化できます。

サーバーを運用していく中でどうしてもトラブルが発生してしまいますが、トラブルシューティングにもなります。

特にインターネットの情報をよく分からずにコピペしてうまく動いていたとしても、何かがキッカケでうまく動かなくなるとどうしていいのか分からずにハマってしまうことがあります。

 

今後も少しずつこの正規表現のページを更新していこうと思います。

Posted by 100%レンタルサーバーを使いこなすサイト管理人

コメントを残す

メールアドレスが公開されることはありません。