0

正規表現を使用するための形式に一致させようとしている式があります。一部は機能しますが、すべてではありません。これは機能します:

String i="3-3";
if(i.matches("[\\d]"+"-"+"[\\d]"))
    System.out.println("correct!");

これはしません:

String i="3-3,2-3";
if(i.matches("[\\d]"+"-"+"[\\d]{1+}"))
    System.out.println("correct!");

{1+}少なくとも1つのインスタンス(例:)を保証しようとします3-4が、機能しません。

私の最終的な目標は、このような数値の任意の組み合わせを認識できる正規表現を作成することです(数値は任意の正の整数(想定)です。2番目の数値は常に最初の数値よりも大きくなります。ペアには文字を含めることができ、次のようにする必要があります。昇順):

"3-4,5-7C,9-22,22A-27", etc
4

1 に答える 1

2

まず、の文字クラス([])は必要ありません\d

次に、数量詞(ちなみに、これ{1+}は違法です。おそらく、{1,}と同等の意味です+)は、直前のアトムに適用されます。これは、正規表現では[\d](ここでも角かっこは必要ありません)です。

第三に、正規表現で昇順部分を保証することはできません。

サンプルデータと期待される結果を考えると、必要なものに最も近いのはこれです([誤った名前の].matches()メソッドを使用するため、アンカーは省略されています)。

\d+[A-Z]*-\d+[A-Z]*(,\d+[A-Z]*-\d+[A-Z]*)*

(もちろん、Java文字列のすべての円記号を2倍にします)。

最後に、この正規表現を頻繁に使用する場合は、を使用することを検討してPatternください。

于 2013-01-05T05:00:33.443 に答える