我在正则表达式中有一个小问题,我想检查我的字符串是否在 2008-13 的范围内。这是我不会放置正则表达式的
Array[k].startsWith("")
到目前为止我已经尝试过:
(200+[8-9])|(201+[0-9])
和
^20+[0-1][0-9]$
但第二个我认为它会给我 2000-2019 年。
我将不胜感激任何帮助。
试试下面的逻辑..
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
}
}
}
}
正则表达式将是:
^200[89]|201[0-3]$
但是,除非您被迫使用单个正则表达式进行验证,否则我只需将其解析为整数,然后使用if
语句检查范围。
您不希望这些+
字符出现在其中,因为它们表示一个或多个前面的对象。因此20+[89]
将允许200000000000000009
.
对于类似任务,您最好的方法是解析String
asInteger
并比较整数,否则您提供的任何方法都容易出错。
还有一种可行的解决方案是:
(2008|2009|2010|2011|2012|2013)
没有奇怪的边缘情况,易于理解。
这是一个简单的正则表达式(可能不是最好的):
20(08|09|10|11|12|13)
您的错误在于使用+
. 修复您的正则表达式如下:
(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
}
}
这对于将来的修改更加稳健:将来可以从文件、数据库等中读取年份的最高值和最低值。