0

正規表現に少し問題があります。文字列が 2008-13 の範囲内にあるかどうかを確認したいと思います。これは、正規表現を配置しない場合です

Array[k].startsWith("")

私はこれまでに試しました:

(200+[8-9])|(201+[0-9])

^20+[0-1][0-9]$

しかし、2番目のものは2000年から2019年になると思います。

助けていただければ幸いです。

4

5 に答える 5

3

以下のロジックを試してください..

public class Lottery{



    // Do not change main().
    public static void main(String [] args) throws Exception{
       String[] myArray ={"2008","2009"};
       for (String val : myArray) {
           int year = Integer.parseInt(val);
           if(year<=2013 && year>=2008)
           {
               // To do
           }
            }

    } 

}
于 2013-02-06T09:23:26.133 に答える
2

正規表現は次のようになります。

^200[89]|201[0-3]$

ただし、検証に単一の正規表現を使用することを余儀なくされていない限り、単純にそれを整数として解析し、ifステートメントで範囲をチェックします。

+これらの文字は、先行するオブジェクトの 1 つ以上を意味するため、そこには入れたくありません。したがって20+[89]、許可され200000000000000009ます。

于 2013-02-06T09:20:00.163 に答える
1

同様のタスクのベストショットは、Stringasを解析しIntegerて整数を比較することです。そうしないと、提供するアプローチはエラーが発生しやすくなります。

それでも機能する1つのソリューションは次のとおりです。

(2008|2009|2010|2011|2012|2013)

奇妙なエッジケースはなく、理解しやすい。

于 2013-02-06T09:20:22.937 に答える
1

これは単純な正規表現です (おそらく最適ではありません):

20(08|09|10|11|12|13)
于 2013-02-06T09:21:39.313 に答える
1

あなたの間違いは の使用にあり+ます。次のように正規表現を修正します。

(200[8-9])|(201[0-9])

ただし、年を抽出して解析し、整数として検証することをお勧めします。

Pattern p = Pattern.compile("(\\d{4})");
Matcher m = p.matcher(str);
if (m.find()) {
    int year = Integer.parseInt(m.group(1));
    if (year > 2008  && year < 2019) {
        // do something
    }
}

これは、将来の変更に対してはるかに堅牢です。年の上位と下位の値は、将来、ファイル、DB などから読み取ることができます。

于 2013-02-06T09:23:34.820 に答える