0

我在正则表达式中有一个小问题,我想检查我的字符串是否在 2008-13 的范围内。这是我不会放置正则表达式的

Array[k].startsWith("")

到目前为止我已经尝试过:

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

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

但第二个我认为它会给我 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语句检查范围。

您不希望这些+字符出现在其中,因为它们表示一个或多个前面的对象。因此20+[89]将允许200000000000000009.

于 2013-02-06T09:20:00.163 回答
1

对于类似任务,您最好的方法是解析StringasInteger并比较整数,否则您提供的任何方法都容易出错。

还有一种可行的解决方案是:

(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
    }
}

这对于将来的修改更加稳健:将来可以从文件、数据库等中读取年份的最高值和最低值。

于 2013-02-06T09:23:34.820 回答