Blog

Java で Regexp::Assemble のように効率的な正規表現を文字列のリストから組み立てる

graph-expression ってやつに入ってる RegExpUtils ってのを使うと出来ます。 (サンプルコードは groovy)

#!/usr/bin/env groovy

@GrabResolver(name='mromll', root='http://mromll.googlecode.com/svn/repo/')
@Grab(group='com.myml', module='gexp', version='0.1')

import com.myml.gexp.chunker.common.util.RegExpUtils;

String [] examples = ['a', 'b', 'c', 'cca'];

String optimizedRegexp = RegExpUtils.convertListToRegexp(true, examples);
println(optimizedRegexp);

出力は以下のようになります。

(?:c(?:ca|)|a|b)

これを使うと、Java でも簡単に効果的な正規表現を生成できます。やったね!

ちなみに開発が終わってるっぽいのと、依存してるモジュールがちょっとおおいので、プロダクションコードの依存に入れるのは微妙だと思うけど、 用途的に実行時に使うものじゃないのでまあいいか、という感じです。