LoginSignup
3
4

More than 3 years have passed since last update.

C#から鬼雲(bregonig.dll)を使って正規表現を処理する

Last updated at Posted at 2020-02-22

目的

grepなど大規模な正規表現検索をしようとすると、C#の System.Text.RegularExpressions.Regexだと処理速度が物足りない。
C#だから遅いのかは判っていませんが、ネイティブなライブラリを使えば多少速くなるのではと思い、サクラエディタとかで採用されている鬼雲(bregonig.dll)をC#から使えないかと調べてみた。
既に実現されている方がいたので、たどり着けるようにメモを残しておきます。

速度はまだ比較できてませんが、鬼雲の正規表現の機能はC#標準クラスの正規表現よりも充実しているらしいです。

参考サイト

https://hnx8.hatenablog.com/entry/2018/11/25/153251
https://github.com/hnx8/BregonigDotNet

Visual Studioでコンパイルする場合

プロジェクトファイルが上記のGitHubサイトに一緒に入っているので、たぶんそれを使えばできるはず。

Visual Studio無しでコンパイルする場合

※下記は私が勝手にやってみた手順なので、上記の参考サイト様には下記内容について問い合わせしないようお願いします。

bregonig.dllをサクラエディタのフォルダからコピーするなりダウンロードし、
上記のGitHubサイトから一式ダウンロードして、
BregonigRegex.cs と Program.cs と bregonig.dllを同じフォルダにおき、


csc BregonigRegex.cs Program.cs

でコンパイルすると、Program.exeが出来上がるので、これを実行します。
下記のエラー


pattern:「(03|045)-(\d{3,4})-(\d{4})」
間違ったフォーマットのプログラムを読み込もうとしました。 (HRESULT からの例外:0x8007000B)
dllの32bit/64bitが妥当ではない可能性もあります。正しいbregonig.dllを実行フォルダに配置してください。

が出る場合は、exeとdllのbitが整合していないと思われますので、


csc /platform:x86 BregonigRegex.cs Program.cs

もしくは


csc /platform:x64 BregonigRegex.cs Program.cs

でコンパイルしたProgram.exeのいずれかがうまく動作するはずです。
Program.exeを実行して下記のようなログがとれれば、うまく動作しているものと思います。


pattern:「(03|045)-(\d{3,4})-(\d{4})」
input:「 Yokohama 045-222-1111  Osaka 06-5555-6666  Tokyo 03-1111-9999 」
 ->found:「045-222-1111」(start=10, length=12)
 ->found:「03-1111-9999」(start=50, length=12)
:
(中略)
:
pattern:「[a-f]」
input:「 置換パターンにエラーがある場合0123456789abcdef 」
replacement:(null)
 ->error:「invalid reg parameter」

処理速度の比較(まだ)

ファイル読み込む処理とか対象のファイルとかの準備ができていない。。。
Regexクラスもオプション指定でキャッシュとかコンパイルとかすると多少速くなるようなので、それらも比較したい。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4