2012-02-04 10 views
1

愚かな問題で立ち往生。私は、ユーザーが限られた量の文字(ABCDEFG)を入力できる入力フィールドを持っています。問題は次のとおりです。ユーザーが入力の1つのサブシーケンスに3つ以上のA、C、E、Gの文字を持つことができないようにします。つまり、AAA、CCC、EEE、GGGはありません。 2番目のものは最初のものとほぼ同じです:1つのサブシーケンス内に1 B、D、F以下があります。つまり、BB、DD、FFはありません。これらの2つのルールは、何らかの形で結合されています。正規表現:シーケンス

たとえば、AABFGECCは有効です。 GEFFFAABGは無効です。

希望、あなたが私を助ける!ありがとうございました!

P.S重要な場合は、私のアプリケーションをVisual Basicで作成しています。しかし、私はこれがあまり重要でないと思います。

+0

いいえ「AAA」は実際には「2以上ではありません」3ではありません...このVB.Netはありますか? – Kobi

答えて

1

あなたは賢いこととバックリファレンスを使用することができますが、簡単な解決策はnegative look aheadを使用してブラックリストに無効なシーケンスです:

^(?!.*(?:AAA|CCC|EEE|GGG|BB|DD|FF))[A-G]*$ 

論理的に、それは同じであるが、中にこれらの7つの無効な配列を有するましたリストを作成し、文字列をチェックするのにどちらか一方が含まれていない場合、これは良い選択肢にもなります。

+0

BBBBBBBBBBBBBBBBBBBBBBBと書くとどうなりますか?それは合格するのだろうか?それはしないでください。 – Dmitri

+0

@Dmitri - "BB"を含んでいるので、それはしません。どのように否定的な先読みが機能するかを見てください。* "BB"を見つけたら*文字列と一致しません*。 – Kobi

+0

ああ!あなたの言ってる事がわかります。面白い。 – Dmitri

2

あなたが避けたい場合に一致する式を作成し、代わりに入力が一致しないことを確認したらどうなりますか?このように:

​​
+0

ありがとう!今、私はそれがどのように解決されるのか理解しています! – Dmitri