2012-04-17 6 views
0

文字列を '反復的な方法'で検証しようとしていますが、すべてのtryoutsが失敗します。 私はそれがちょっと複雑で、私はそれを正しくする方法を教えてくれたかもしれないと思っています。 私は正規表現のパターンを使用するようにあなたのほとんどがお勧めしますが、実際にどのように、そして一般的に、正規表現を無限の "セット"のために定義することはできないと思いますか?Java:特定の文字列パターンの検証

私が検証したい文字列が ある "ANYTHING | NUMBER_ONLY、ANYTHING | NUMBER_ONLY ..."

例えば: "こんにちは| 5、単語| 10" と「ハロー| 5、単語| 10、 "両方とも有効です。

注:文字列の末尾にカンマ「、」がない場合は気になりません。

答えて

1

Kleene star*)との各部分を検証する必要があります。次のパターンは、このトリックを行う必要があります。

[^,|]+\|\d+(,[^,|]+\|\d+)*,? 
A----------B--------------C- 

パートAが最初の要素に一致します。パートBは以下の要素に一致します(星に気づく)。パートCは最後のカンマです。

警告:Java文字列のバックスラッシュをエスケープすることを忘れないでください。

+0

うわー、ほぼ完璧です。 "aa | 3、aa | 4、hi | aa、aa | 6"のような文字列がテストに合格したようです:< – Popokoko

+0

ああ、そうです。新しいバージョンを確認してください。 '[^、|]'は '、'と '|'以外のものにマッチします。 –

+0

そして驚くことではありません!それはまったく信じられないほどです。再度、感謝します! – Popokoko

1

文字列を配列に分割することをお勧めします。|区切り文字また、各部分を別々に検証します。 (最初のものを除く)各部分は、正規表現で「無限のセット」を定義することができます

スプリット,によって更新されたパターン\d+(,.*)?

次一致すると.*|\d+

+0

テスト入力が与えられてもそれは意味をなさない。コンマは上位の区切り記号で、内側のセパレータです。 –

+0

@MarkoTopolnik hm、本当に。ありがとう、私はそれに気付かなかった。 –

+0

Markoは正しいです。どうやって別の言葉に数字を区切りますか? – Popokoko

関連する問題