« 2007年01月 | メイン | 2007年05月 »

2007年02月 アーカイブ

2007年02月08日

正規表現の範囲は?

 今までは条件に合うかどうかだけをを考えてきました。しかし、正規表現は、長いテキストから、条件に合う部分を抜き出すということもできます。その時に悩むのが、範囲指定です。

 例えば
【東京は晴れです。京都は雨です。】というテキストあるとして、【東京から始まって「。」で終わる一文】を探す場合、【東京*。】とすると、マッチはしますが、内容は【東京は晴れです。京都は雨です。】と最後の「。」まで広く検索します。

 この検索は、最長検索と呼ばれています。つまり、条件に合う一番広い範囲を優先するということです。正規表現では、マッチする、しないだけではなく、その文字を抜き出す、検索するといった作業を伴う場合も多いので、こでは困ります。例えば「”」で囲まれた部分とか、【】で囲まれた部分をチェックしたい場合、長い文章にそれがいくつも存在すれば、最初に出てくる部分から、一番最後の部分を取り込むことになってしま、うまくいきません。そこで、メタキャラクタ【?】を使います。【?】は、0文字もしくは1文字という意味なのですが、【+?】or【*?】のように使うと、検索を最短にします。といっても解りにくいですね。

最初の例の場合、【東京*。*?】などとします。すると、東京から始まって、任意の文字列【*】があって、【。】があって、任意の0文字もしくは1文字(*?)文字列があるとなります。言葉がおかしいのですが、【。】一回出てくれば十分なのですから、最長検索をする必要は無いと判断されるようです。結果として、最短検索になります。

 このように、テキストから、条件に合う部分を抜き出すのをマッチさせると区別して、キャプチャーすると言う場合もあります。

 この記事を書いている現在、正規表現チェッカーでは判断できません。時間を見つけて、正規表現キャプチャーチェッカーも作ろうと思います。

2007年02月11日

正規表現チェッカーが新しくなりました

 正規表現チェッカーは、正規表現を学習、利用、チェックする為のツールです。

 正規表現をプログラミングなどで使う場合、作成中のプログラムで動作確認をしながら正規表現を組み立てるのでは効率が悪いです。このチェッカーは、純粋に正規表現が思うように動作しているかだけを調べられます。

 使い方は簡単です。作成した正規表現と試しにマッチさせるテキストを入力して、チェックボタンをクリックすてば、マッチするかどうか表示されます。  現在、

が稼動しております。  PHPバージョンは、ereg、mb_ereg、preg_match_allの3つの関数を選択できます。

 正規表現チェッカーに関するお問い合わせ、ご質問、要望、バグ報告などは、ここへコメントしていただければ幸いです。

2007年02月14日

拡張子を得る

ファイルネームから、拡張子だけ知りたいときがあります。

ファイルネームが、指定の拡張子かどうか調べるには、

【(\.gif|\.jpg)】のように【|】で区切った拡張子を記入していけばOKです。

また、拡張子を取り出したい場合は、

【\..*】をプログラム上で処理します。PHPの場合は、【ereg("\..*",$filename,$res)】のように使うと、変数$res[0]に拡張子が入ります。ドット以降の文字列を取得するだけの正規表現ですが、ファイルネームに拡張子以外のドットが含まれるといったことが無ければ、これで大丈夫です。ファイルネームが、ディレクトリなどを含む場合は、basename($filename)としておけば純粋にファイル部分だけが取り出せます。

About 2007年02月

2007年02月にブログ「試して学習・実践正規表現」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年01月です。

次のアーカイブは2007年05月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35