テキストマッチング入門
Previous Back to contents Next

検索言語になれていない人には、最初はなんだか複雑な暗号のように見えることでしょう。でも心配ありません。考え方は本当にシンプルなものです。よくワイルドカード とかメタ・キャラクタ とか呼ばれるいくつかの文字が、特別な意味を持っています。これらの文字は、元のテキストの一部分がある条件を満たしたときにだけマッチします。そしてマッチしたテキストは、何か他のテキストに置換することができます。

たとえば、アスタリスク「*」はあらゆる任意の文字列にマッチします。その文字列はどんなものであってもかまいません。これは通常、実際にはどんなものであるかわからない文字列を検索するのに使用されます。たとえば、「ko」 で終わるすべての文字列を検索したいとしてみましょう。「*ko」 を使用すれば、「Naoko」や「Atsuko」はマッチしますが、「ko」がない「Michie」はマッチしません。あるいは「john*smith」を使用すれば「John W Smith」や「John 'Bubba' Smith」や、あるいはただの「John Smith」もマッチします。

この考え方をHTMLに適用してみましょう。たとえば、すべてのイメージタグにマッチさせたいとします。イメージタグは常に「<img」で始まり、「>」で終わりますが、その間にはなんらかの文字列があることでしょう。この場合、「<img * >」という検索表現を使用することができます。これを文章で書くと、以下のような意味になります。

「<img」 で始まり、間にもしかしたら何か文字列があり、「>」で終わるようなものにマッチせよ。

置換テキストを使用することで、イメージタグをあなたが望むような物に書き換えてしまうことができます。さらに、検索した元のテキストの一部分(たとえばイメージのURLなど)を「取り込んで」、あとで置換テキストで使えるように保持しておくことができます。下の例を見てください。

Matching: <img * src=(\w)\1 * >
Replace: <img src=\1 border=1 >

この例ではいくつか新しいアイディアを使ってみました。まず最初に、「\w」(ワードマッチ)です。これはスペースで区切られていないひと続きの文字列にマッチします。これはURLをマッチさせたりするのに有効に使えます。「(...)」 とその直後に置いてある「\1」の基本的な意味は、「括弧の中でマッチしたものを、変数1に代入する」 です。置換テキストで「\1」を使うと、変数1の内容をその場所に挿入します。Proxomitron の検索言語では、このような 0~9 までの10個の変数を使用することができます。

上記のルールを実行すると、このようなイメージタグは...

<img align=left src="bison.gif" alt="My pet bison Phil" >

以下のように書き換えられます...

<img src="bison.gif" border=1 >

で書かれた部分は、最初の「*」がマッチしたところです。
で書かれた部分は、「(\w)\1」がマッチしたところです。
で書かれた部分は、最後の「*」がマッチしたところです。

青と緑の部分は、置換テキストには現れていないことに注目してください。変数を使って残すことを決めた部分だけが残るのです。どの部分を残し、どの部分を捨てるかを決めることによって、HTMLを完全に書き直すことができます。たとえば、上記の例でバイソンの画像を表示する代わりに、クリックしたらその画像を見ることができるリンクに変えてみましょう。その場合には、置換テキストを以下のように変えればいいでしょう...

Replace: <a href=\1 > a picture </a>

すると、同じイメージタグの...

<img align=left src="bison.gif" alt="My pet bison Phil" >

は、以下のように書き換えられるでしょう...

<a href="bison.gif" > a picture </a>

これで、どのようにパターンマッチングが働くか、その概要を理解していただければと思います。これらのアイディアを実行に移すにあたって、他のメタキャラクタ についても説明していますので、参照してみてください。

Return to matching rules


Return to main index