HTML要素を抜き出す正規表現の自動生成プログラム
HTML要素を抜き出す正規表現を自動生成するプログラム html2regexp を作ったので公開します。
使い方は簡単で、HTMLファイル中の抜き出したいHTML要素の先頭タグの末尾にh2rと書き加えるだけです。例えば次のように指定します。
<ul> <li><a href="hoge" class="h" h2r>hoge</a></li> <li><a href="huga" class="h" h2r>huga</a></li> </ul> <div> <a href="f">f</a> </div>
すると、html2regexpは、2つのa要素を抜き出す次の正規表現を生成します。
(<(\w*?)\s*([^>]*?" class="h"[^>]*?)>(.*?)<\/\2>)
HTMLを抜き出して利用したり、Webアプリケーションのテストなどの際に便利だと思います。
動作原理は、次のようになっています。まず、HTML要素の雛形となる正規表現
(<(\w*?)\s*([^>]*?)>(.*?)<\/\2>)
を用意します。そして、抜き出したいHTML要素のタグと属性から、タグと属性として適切な文字列を抽出して、これらの文字列を正規表現に放り込んでいます。このとき、属性として適切な文字列を求めるのに Suffix Tree を使っています。
なお、雛形の正規表現では抽出できないHTML要素は当然抽出できません。その為、適切な正規表現を生成できない場合もありますが、その場合、出来るだけ精度の高い正規表現を抽出します。
デモページもありますので、良かったら試してみてください。
http://llamerada.sakura.ne.jp/html2regexp/demo/demo.cgi
XPathバージョンもそのうち作ります。