2012-04-26 13 views
1

誰かが言及したように正規表現で私を助けることができます。特定のパターンの正規表現

属性 'range'を持つxml要素 'docs'があります。範囲は、以下の形式の値だけです。

範囲= "1,2,3,4,5"

又は

範囲= "1,2,3-6,10-12,15,20-30"

または

範囲= "すべて"

LITTELヘルプははるかに高く評価されます。 ありがとうございます。

+1

申し訳ありませんが、あなたの質問は私には分かりません。あなたはどんなマッチグループを期待していますか?あなたの理想的な正規表現の一致出力を持つコードサンプルを投稿してください。 – zetlen

+0

は、属性 'range'を持つXMLを検証しています。私が上記のもの以外の範囲に余分なcharectersを入力すると、それはエラーを投げるべきです。だから私は正確に(私の質問で)範囲で与えた値のパターンに一致する定期的なexpが必要です。 –

答えて

3
^\d(?!.*,-)[\d\,\-]*\d$|^all$|^\d+$ 

あなたの番号に対応してください。入力には、数字、コンマ、ダッシュ、またはallという単語のみを使用できます。

http://regexr.com?30p7f

+1

これは ",,,,,,,"と一致します – aquinas

+0

必要に応じて機能しません。それは1,2,3、abc、@、 –

+0

の値をとっています。 '^ \ d +?[\ d、 - ] + $ | all' – Jack

2

all|[1-9][0-9]*(-[1-9][0-9]*)?(,[1-9][0-9]*(-[1-9][0-9]*)?)*

私はゼロと先頭のゼロが許可されていないことを前提としています。

数字が昇順になるようにするには、正規表現を使用するのは適切ではありません。

+1

+1正規表現はこの問題の良い解決策ではないと私は同意します。 –

1

@minopretが述べたように、これはおそらく正規表現では完全に扱われない方がいいでしょう。文字列をsplit(",")とし、結果の配列を反復して昇順になるようにします。個々の配列要素をその点で正規表現して、次のようなものと一致するかどうかを確認することができます。

\d+(-\d+)? 
+0

こんにちはabdullah、私はxsdにxsdに対してxmlを検証しているxsdにあるので、数字を分割する選択肢はありません。パターンが失敗するとすぐに、私はXMLコンテンツを解析する前に検証エラーとしてスローされるはずです。 –

+0

十分ですが、おそらく 'java'でタグ付けしてはいけません。 –