2012-02-17 10 views
4

私は4つの複雑な正規表現のパターンA,B,CおよびDを持っています。私は、A(B AND C AND D)という形式のパターンをすべて見つけ出す必要があります。B,C,Dの順番は問題ではなく、CDはオプションです。正規表現でそのようなことをする方法はありますか?B,C,Dの可能なすべての順列を書いたり、それらの間に(|)を書いてはいけませんか?特定の順序を持​​たないグループに一致する正規表現

私はこれをJavaでプログラミングしていますが、パフォーマンスに優れています。ありがとう!

編集:3つの複雑なパターンを4つの複雑な正規表現パターンに変更します。

+0

A、B、B、Bは許容可能な結果ですか? – ohaal

+1

もちろん、いいえ。彼は「B、C、Dの可能なすべての順列を(あるいはそれらの間に)書かずに書いていますか?」 ABBBが有効な正規表現ではないことを意味します。 – shift66

+0

私はA(B AND C AND D)と混同されていました。 – ohaal

答えて

3

いいえすべての順列を書く必要があります。これは通常の言語の制限です。しかし、一度それを行うと、他の正規表現と同じようにパフォーマンスが向上します。

+0

"他の正規表現と同じようにパフォーマンスが良い"とはどういう意味ですか?すべての置換をチェックするのは非常にパフォーマンスが重くなるようです... – apines

+0

それは正規表現の美しさです。正規表現の大きさではなく、チェックする文字数だけを支払うだけです。正規表現のサイズは、 'Pattern.compile()'が実行されるのにかかる時間とその 'Pattern'オブジェクトによって使用されるメモリに"唯一 "影響します。あなたがより多くのルックアップを知りたいなら、Wikipediaの正規言語と有限状態マシン。 – Johannes

+0

新入生の年にそのコースを受けた;)ありがとう! – apines

関連する問題