正規表現のすすめ

正規表現という便利な文字列判定システムがある。

これが使えると文字列の検索・解析・置換が高度な条件を比較的簡単に記述できるので,文字列処理をしたいときはおすすめ。

複雑な条件をプログラムの繰り返し文で書くとわけがわからなくなり,バグもたくさん入って収集がつかなくなる。そうならない様にするのに最適。

例えば,HTMLのソースの解析とかURLのアドレスを解析に大変便利。
HTMLは,構文がかなりルーズなので,正規表現を使わないと大変で,バグや検索漏れが起こりやすい。(表現できるパターンに対応するのが大変)
Perlは,正規表現のための専用構文やPerl独自の拡張がされている。
もちろん,RubyやPHPやJavaScriptでも正規表現は使える。

たとえば

http://www.kcg.ac.jp
http://www.kcg.edu
https://support.kcg.ac.jp
https://support.kcg.edu
http://kcg.edu
これらのいずれかではじまるURLが 「kcg.eduグループのアドレス」であると判別するとしたら,正規表現でするなら,

^https?:\\/\\/(www\\.|support\\.|)kcg\\.(ac\\.jp|edu)

と言う感じ。

これで,上記のいずれかのアドレスか,それ以外かを認識出来る。

たとえば,PHPで書いたら以下の様な感じ。正規表現を使わない場合は,もっとたくさんのif文か,繰り返し文が必要で,さらに長いプログラムを書かなくてはならないし,応用がきかない。

<?php
$url = ‘http://www.kcg.ac.jp/opencampus/‘;

if(preg_match(‘/^https?:\\/\\/(www\\.|support\\.|)kcg\\.(ac\\.jp|edu)/’, $url) ) {
echo ‘kcg.eduグループのURLです。’;
} else {
echo ‘kcg.eduグループ以外のURLです。’;
}
?>

$url = ‘http://www.kcg.ac.jp/opencampus/‘; を変えれば,確認できます。
たとえば
$url = ‘https://support.kcg.ac.jp/kcg/apply.cgi‘;
とかにしても,OK。

$url = ‘http://blog.kcg.ne.jp/s2node‘;
だと,この正規表現では,マッチしない。

もっと効率の良い書き方や,もっと厳密な書き方もあるが,わかりやすくするために,単純にしてある。ちなみに,あまり作り込むとほとんど読めなくなるのでコメントが必要になる。

ソフト開発はWindowsだから関係ないや。という人もにもおすすめ。
Visual Studioのテキストエディタにも検索・置換機能のオプションとして「正規表現」が使えるので,プログラムのソースの特定パターンの検索や置換がこれで出来ると,複雑な構文の置換にも便利。

あ,もちろん構文は勉強してね。
独特だけど,慣れです。

おまけ:
KCGブログ( http://blog.kcg.ne.jp/ )も,これに含めるなら
^https?:\\/\\/(blog\\.|www\\.|support\\.|)kcg\\.(ne\\.jp|ac\\.jp|edu)
となる。このレベルなら,知識がなくても何となく分かるのでは?

comments

コメントを残す