« 正規表現チェッカーとは | メイン | 正規表現チェッカーが新しくなりました »

正規表現の範囲は?

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

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

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

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

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

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

トラックバック

このエントリーのトラックバックURL:
http://www.wakusan.com/mt/mt-tb.cgi/222

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2007年02月08日 22:35に投稿されたエントリーのページです。

ひとつ前の投稿は「正規表現チェッカーとは」です。

次の投稿は「正規表現チェッカーが新しくなりました」です。

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

Powered by
Movable Type 3.35