正規表現の強み

(1/1)
Wikipediaによると、正規表現 (せいきひょうげん) (regular expression)とは、文字列の集合を一つの形式で表現する方法」である。
曖昧な定義であるが、PHPで正規表現を利用する場面は、ずばり、文字列の検索と置換である。

正規表現を使うと曖昧な検索ができる

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

となると、複数のスペリングに合致するような検索プログラムを書かなければならない。これを if 文にしたら、
if ($str == "maxOS" || $str == "Mac OS X" || $str == "MacOS X" || $str == "OS X") {
となるだろう。それとも、switch~case文で書くだろうか。
いずれにしても、パターンが多くなければなるほど、プログラムのメンテナンス性が低下する。そこで登場するのが正規表現である。

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" と書く人は少ないと思うが、絶対にいないとは言えない。
(この項おわり)
header