ezRegreg

数日前に公開すると予告していたDLL、
それがこのezRegregです。
ネーミングセンスの無さは置いておいて、
名前から何となく分かると思いますが、
VB(A)で簡単に正規表現を扱うDLLです。
簡単というだけに、複雑な事は出来ませんが…


僕はいつもVB正規表現で何かマッチさせる時、
次のようなコードを書きます。

Dim re as Object, mObj as Object

Set re = CreateObject("VBScript.RegExp")

re.Global = True
re.IgnoreCase = True
re.Pattern = "正規表現"
Set mObj = re.Execute("対象文字列")
マッチ文字列 = mObj.Item(0)

Set re = Nothing


正規表現オブジェクトを用意し、
オブジェクトの設定をし、
処理をして別のオブジェクトへ代入、
そのオブジェクトから文字列として取り出す、
そんな感じだと思います。


なんか…面倒くさくないですか?(笑)
まぁ、クラスモジュールに記述して関数化して、
使う時にインスタンス化して使うとスッキリしますが、
うーん…。(笑)今まではそう使ってました。


で、心の片隅にソフトシンセを作りたい野望が残っているので、
C++で、正規表現を扱う関数のDLLを作ってみようと思った訳です。
文字列の扱いが、大変苦労しました。
しかし今回は、自力で何とかしました(笑)
VBが簡単と言われる理由が実感出来ました。
という事で、このブログのこの記事でしか公開しませんが、
中身を説明したいと思います(笑)


まず、DLLを使うという事で、
Declareステートメントで宣言して下さい。
(場合によってPublic及びPrivateを付加して下さい。)

'ezFound関数
Declare Function ezFound Lib "ezRegreg.dll" _
          (ByVal str As String, ByVal regstr As String) As Integer
'ezMatch関数
Declare Function ezMatch Lib "ezRegreg.dll" _
          (ByVal str As String, ByVal regstr As String, ByVal m As Integer) As String
'ezRep関数
Declare Function ezRep Lib "ezRegreg.dll" _
          (ByVal str As String, ByVal regstr As String, ByVal repstr As String) As String


それではezFound関数から。


ezFound関数は、ある文字列に対し、
正規表現がマッチするか、しないかの真偽をしてくれます。
マッチする場合1を、しない場合は0を返します。


戻り値(0 or 1) = ezFound("文字列", "正規表現")


DLLの動作チェックツールも作りましたが、
こんな感じですね。


正規表現DLL


この場合、「半角英字が1文字以上続いてから、半角数字が一つある」
という事ですから、マッチします。


続いてezMatch関数。


こちらはマッチした文字列を取得する事が出来ます。
複数該当の場合、第3引数で何番目に一致したか指定できます。(0から数えます)
マッチしない場合は、文字列「no match!」を返します。


戻り値(マッチ文字列) = ezMatch("文字列", "正規表現", 何番目に一致したかの整数)


正規表現DLL


この場合、「jの後に半角数字が3つ」で「1番目(0から数えて)に一致」
ですので、j968が戻り値として返されます。


最後にezRep関数。


ezRep関数は、文字列のマッチした箇所を、指定した文字列に置換してくれます。


戻り値(置換後文字列) = ezRep("文字列", "正規表現", "置換文字列")


正規表現DLL


この場合、「何でも良い文字が二つあり、行末」ですので、
太郎がマッチします。
太郎に対し、第3引数で指定した、花子に置き換えられます。
よって山田花子が文字列として返されます。


…とまぁ、こんな感じなんですが、
詳しくはReadMeを読んで頂ければと思います(笑)
必要な方は使ってみて下さい。
但し、本ソフトウェアの使用により発生した、
いかなる損害に対しても私は責任を負いません(笑)
今のところ普通に動いてるので、問題はないと思いますが…。


あと、文中で出て来た動作チェックツールが欲しい方は、
別途連絡下さい(笑)(※要Excel)パッケージには同封してません。
ダウンロードはコチラから!


(予告なく削除する可能性もあります。)
http://d.hatena.ne.jp/Shinez/files/ezRegreg.zip?d=download



Win32API完璧マスタ―Visual C++プログラミング

Win32API完璧マスタ―Visual C++プログラミング