2012-01-29 8 views
0

私はアルファベットの上に次のような問題のために正規表現見つける特定のインスタンス

すべての文字列を正規表現を見つけるのトラブルを抱えている{、B、C、D}少なくとも4つのCのインスタンスと、少なくとも2で

+0

なぜ正規表現が必要ですか?出現回数を数えてください。 – Mat

+1

これはある種の宿題だと思いますか?もしそうなら、通常の言語を記述できる「正規の」正規表現が必要であり、非正規の言語を作成する拡張子を含む正規表現の種類ではないと思います。もしそうなら、質問にそのことを述べてください。 –

答えて

1

のインスタンスは、先読みを使用します。

^(?=(.*c){4,})(?=(.*a){2,})[a-z]+ 

は、私はあなたが「アルファベット」によって何を意味するかわからない - 、C私は「任意の文字」を想定しているが、それは文字通り、Bの場合dを変更すると[a-z]+[a-d]+

+0

なぜこのテストケースでは動作しないようですか? cbdbdbdbdbdbcbdbdbdbdbcdbdbdbdbcdbdbbdbdcdbdbdbdbdbdbdbcdbdbcdbcdbadbad – user1176235

+0

@ user1176235、この場合は問題ありません。 – Qtax

+0

ルックアヘッドは適切な正規表現ではありません。したがって、これが宿題であれば、教授は恐らくあなたがすべての可能な順列を列挙しなければならないことを発見したいと思っています。 – tripleee

0

もう少し効率的なボヘミアンのソリューションよりも、そしてまた私たちは、不要な文字が含まれている可能性があり、より長い文字列の部分文字列一致していないことを確認するためにアンカー:コメントで概説したように

^(?=(?:[^c]*c){4})(?=(?:[^a]*a){2})[a-z]+$ 
0

を、この質問は思わ集合理論から導かれる正規表現の厳密な数学的理論に関連する。その場合、先読みは許可されません。許可されたシーケンスを列挙する必要があります。わかりやすくするために、私は.*を省略しています。これは、次のリストのシンボルの前、後、後にする必要があります。

ccccaa| 
cccaca| 
cccaac| 
ccacca| 
ccacac| 
ccacca| 
ccaacc| 
caccca| 
caccac| 
cacacc| 
caaccc| 
acccca| 
acccac| 
accacc| 
acaccc| 
aacccc 
関連する問題