HSPで正規表現を使う

今時、正規表現の使えないプログラミング言語は文字列操作が面倒で、いやになるのですが、HSPも標準では正規表現には対応しておらず、普通に文字列操作のみで特定文字の切り出しとかは面倒なのですが、外部のDLLとそれを利用する為のモジュールを利用する事で正規表現を利用する事ができるようになります。HSP+正規表現で検索してみたのですがHSP3.1で利用できる正規表現の情報は有るようでこれっていうのがなかなか出てきません。いろいろ、検索してみた感じでは下記のBREGEXP.DLLとgm_bregexp_dll.hspの組み合わせがよさそうでしたので実際に利用させていただきました。

正規表現を利用するには下記のサイトのBREGEXP.DLLというperl5並みの正規表現を提供してくれるDLLとそれをHSPで利用するためにラッピングしてくれるgm_bregexp_dll.hspを正規表現を利用したいHSPのプログラムでインクルードします。

◇BREGEXP DLL
http://www.hi-ho.ne.jp/babaq/bregexp.html

◇正規表現ライブラリ、"bregexp.dll"を利用する – HSPモジュール
http://lldev.jp/hsp/module/bregexp_dll.html

◎実際の使い方

ちょっとしたサンプルを書いてみた。URL
http://ecx.images-amazon.com/images/I/31sSbDRIPGL.jpg

から、ファイル名の部分(赤字の部分)を抜き出す正規表現のサンプルです。

1: #include "gm_bregexp_dll.hsp"
2:
3: url = "http://ecx.images-amazon.com/images/I/31sSbDRIPGL.jpg"
4: brex_match "m#[^/]+$#",url,0,idx,len
5:
6: mes url
7: mes "["+strmid(url,idx,len)+"] stat="+stat

実際に実行すると下の様な結果になります。

http://ecx.images-amazon.com/images/I/31sSbDRIPGL.jpg
[31sSbDRIPGL.jpg] stat=1

 

1行目はgm_bregexp_dll.hspをインクルードする宣言です。これでgm_bregexp_dll.hspとその中で呼ばれているBREGEXP.DLLを利用する事ができるようになります。あらかじめ上記の二つのファイルは利用するプログラムと同じ場所において置くといいです。

3行目で、変数urlにターゲットとなるurl文字列を代入しています。

4行目の「brex_match "m#[^/]+$#",url,0,idx,len」の部分が実際のマッチ関数になります。

最初の引数が正規表現です。通常は「m/正規表現/」の様に記述しますがターゲットの文字列自体に「/」が含まれる場合は「m#正規表現#」の様にmを指定して囲み文字を別の文字にして対処します。

ここで指定している正規表現の意味ですが、

「[^/]+$」は

[^/]は「/」スラッシュ以外の文字
「+」は1個以上
「$」文字列の終わり

という事で、「スラッシュ以外で始まる1文字以上の文字列で行末まで」という正規表現になっています。なのでこれに一致する部分は下のURLでいうと

http://ecx.images-amazon.com/images/I/31sSbDRIPGL.jpg

「31sSbDRIPGL.jpg」この部分になります。これでファイル名だけ抜き出せるわけです。

2番目の引数urlは三行目で変数urlにターゲットとなるURL文字列が入っています。

3番目の引数は、何バイト目から正規表現とのマッチングを行うかのオフセット地です。最初から行うので0を指定しています。

4番目の引数は、正規表現にマッチした場合、何バイト目でマッチしたかの情報が入る変数を指定します。

5番目の引数は、正規表現にマッチした場合、正規表現にマッチした文字列の長さが入ります。

結果、strmid(url,idx,len)にてマッチ部分を取り出す事ができます。

さらに、strmid(url,0,idx)とすれば、
「http://ecx.images-amazon.com/images/I/」の部分だけ取得する事ができて、URL部分とファイル名を切り離す事ができたりするわけです。

さらに詳しい使い方は、上記のそれぞれの参考サイトを参照してください。

ここでは、簡単な例を書いてみましたが、正規表現は色々な用途で利用できますので覚えておくと便利です。

タグ : ,