正規表現のリストがあるとしましょう(外部ソースから読み取る-ファイル、データベースなど)。文字列がこれらの正規表現のどれに一致するかを確認したい。
これらすべての正規表現を反復して照合することはできますが、リストが膨大になる可能性があり、これは重要な操作です。
これらすべての正規表現を 1 つに (それらの間に | を使用して) 結合することはできますが、問題は、すべてではなく、最初に一致した正規表現しか識別できないことです。
もう 1 つのアイデアは、これらすべての正規表現のオートマトンを作成し、対応する正規表現のインデックスなどで最終状態をマークすることです。http://cs.au.dk/~amoeller/automaton/を見ていましたが、これは正規表現とオートマトンを扱うことができるようですが、私の問題を解決するために拡張できるかどうかはわかりません。
他にアイデアはありますか?
いくつかのコメントを明確にするために、コード サンプルを追加しました。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternTest {
public static void main(String[] args) {
Pattern p = Pattern.compile("(a(?:b|c)a)|((?:a|b)ba)|(ab(?:a|c))");
Matcher m = p.matcher("aba");
System.out.println(m.matches());
System.out.println(m.groupCount());
for (int i = 0, n = m.groupCount(); i < n; i++) {
System.out.println(m.group(i));
}
}
}
印刷します
true
3
aba
aba
null
ご覧のとおり、最初のグループのみが一致しており、他の 2 つのグループを一致させる方法がわかりません。
その他の調査結果 - 上記のオートマトン ライブラリを使用すると、問題は次のようになります。