正規表現を使うと曖昧な検索ができる
たとえば複数のテキスト・ファイルの中から、"macOS" という単語を検索したいとする。インターネット上であれば Googleを使って簡単にできることなのだが、自分でプログラムを組んで、ローカルファイルに対して同じ処理をさせようとすると、かなり苦労をする。
というのは、"macOS" のスペリングとして "macOS" 以外に、過去のスペリングとして "Mac OS X", "MacOS X", "OS X" などがあるからだ。さすがに "mac os x" や "os x" と書く人は少ないと思うが、絶対にいないとは言えない。

となると、複数のスペリングに合致するような検索プログラムを書かなければならない。これを if 文にしたら、

PHPの正規表現を用いると(ここでは PCRE 関数群を利用する)
初めての方には怪しげな記号が並んでいるだけと映るかもしれないが、これは "OSX" にもマッチする。想定外の検索パターンが出てきた場合、柔軟に対応できるのが正規表現の強みである。
さらに "mac os x" や "os x" も検索対象としたいなら、正規表現はそのままで、パターン修飾子 "i" を追加することで、大文字・小文字を区別しない。正規表現で日本語も同じように扱えるのがPHPの強みである。

たとえば、PHPのような「サーバサイドスクリプティング」は、「サーバサイドスクリプティング」「サーバーサイドスクリプト」「サーバサイドスクリプト」と書く人もいるだろう。この4種類のすべてにマッチする正規表現は
というのは、"macOS" のスペリングとして "macOS" 以外に、過去のスペリングとして "Mac OS X", "MacOS X", "OS X" などがあるからだ。さすがに "mac os x" や "os x" と書く人は少ないと思うが、絶対にいないとは言えない。

となると、複数のスペリングに合致するような検索プログラムを書かなければならない。これを if 文にしたら、
if ($str == "macOS" || $str == "Mac OS X" || $str == "MacOS X" || $str == "OS X") {となるだろう。表記のゆらぎの数だけプログラムは複雑になり、プログラムのメンテナンス性が低下する。そこで登場するのが正規表現だ。

PHPの正規表現を用いると(ここでは PCRE 関数群を利用する)
/(Mac)?\s*OS(\s*X)*/と1行で書くことができる。
初めての方には怪しげな記号が並んでいるだけと映るかもしれないが、これは "OSX" にもマッチする。想定外の検索パターンが出てきた場合、柔軟に対応できるのが正規表現の強みである。
さらに "mac os x" や "os x" も検索対象としたいなら、正規表現はそのままで、パターン修飾子 "i" を追加することで、大文字・小文字を区別しない。正規表現で日本語も同じように扱えるのがPHPの強みである。
/(Mac)?\s*OS(\s*X)*/i

たとえば、PHPのような「サーバサイドスクリプティング」は、「サーバサイドスクリプティング」「サーバーサイドスクリプト」「サーバサイドスクリプト」と書く人もいるだろう。この4種類のすべてにマッチする正規表現は
/サーバー?サイド[スクリプティング|スクリプト]+/uである。
正規表現でマッチした文字列を表示するデモ・プログラム
マッチング・テキスト
というのは、"macOS" のスペリングとして "macOS" 以外に、過去のスペリングとして "Mac OS X", "MacOS X", "OS X" などがあるからだ。さすがに "mac os x" や "os x" と書く人は少ないと思うが、絶対にいないとは言えない。 |
(この項おわり)
曖昧な定義であるが、PHPで正規表現を利用する場面は、ずばり、文字列の検索と置換である。