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 でも簡単に効果的な正規表現を生成できます。やったね!
ちなみに開発が終わってるっぽいのと、依存してるモジュールがちょっとおおいので、プロダクションコードの依存に入れるのは微妙だと思うけど、 用途的に実行時に使うものじゃないのでまあいいか、という感じです。
Published: 2014-11-28(Fri) 08:09