正規表現を利用する手段いろいろ

例題として以下の置換処理を考える。

"foo(10,1)+foo(20,2)" → "bar(1,10)+bar(2,20)"

・関数名をfooからbarに変更。
・第1引数と第2引数を交換。
・置換箇所は2カ所以上。

正規表現を使わない場合

比較対象として正規表現を使わない例もあげておく
fooをbarに置換するのみで、当然ながら引数部分の交換等は出来ない。

ans = Replace("foo(10,1)+foo(20,2)", "foo", "bar")

VBScript.RegExpを借りる

追加で必要になるファイルがないのがメリット
パターンやgオプションを後で代入することになるのが面倒

Set re = CreateObject("VBScript.RegExp")
re.Pattern = "foo\((.+?),(.+?)\)"
re.Global = True
ans = re.Replace("foo(10,1)+foo(20,2)", "bar($2,$1)")

RegExpクラスを使う

ツール→参照設定で、Microsoft VBScript Regular Expressions 5.5にチェックを入れると、RegExpクラスが使えるようになる。
1行目以外は"VBScript.RegExp"を使う場合と同じ。って結局同じオブジェクトを触っていることになるので当然か。

Set re = New RegExp
re.Pattern = "foo\((.+?),(.+?)\)"
re.Global = True
ans = re.Replace("foo(10,1)+foo(20,2)", "bar($2,$1)")

Bregexp.dllを利用する

別途dllを用意する必要があるが、呼び出し方はシンプルでいい。
以下のページからダウンロード出来る。
http://www.hi-ho.ne.jp/babaq/bregexp.html

Declare Function Replace Lib "bregexp" (reg As String, str As String) As String
ans = Replace("s/foo\((.+?),(.+?)\)/bar($2,$1)/g", "foo(10,1)+foo(20,2)")

Bregonig.dll

APIがBregexp互換でエンジンが鬼車という高機能版。
が、VBからは使えないらしいので今回は見送り。

Tatsuo Baba氏による正規表現ライブラリである Bregexp.dll互換 の正規表現ライブラリです。
正規表現エンジンとして鬼車 (Oniguruma)を採用することにより、 オリジナルの Bregexp.dll よりも高度な正規表現を使用できるようになっ ています。
現バージョンでは、Visual Basic 用の API は実装されていません。VB製のアプリケーションから使用する場合は、オリジナルの Bregexp.dll をお使いください。

http://homepage3.nifty.com/k-takata/mysoft/bregonig.html