如何从
转换正则表达式^((19|20)\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-2099
上面的一个工作完美,只想更改日期格式1900-9999。所以去下面一个。
我试过这样做不起作用
^(([19-99])\\d\\d)(0?[1-9]|1[012])(0?[1-9]|[12][0-9]|3[01])? for 1900-9999
有什么问题请指导我解决这个问题。
答案 0 :(得分:4)
甚至不使用正则表达式来验证整数范围(这是维护地狱之后,就像你现在一样)。而是将您的字符串解析为更准确的日期或整数,并使用<
<=
>
>=
运算符。
int year = Integer.parseInt(yourYear)
if (year >= 1900 && year <= 9999){
//do your job here
}
但是如果你没有选择而你必须使用正则表达式,你可以尝试使用
19\\d\\d|[2-9]\\d\\d\\d
您可以将其视为
19xx <-> 1 9 \\d \\d
2xxx <-> [2-9] \\d \\d \\d
3xxx <-> [2-9] \\d \\d \\d
4xxx <-> [2-9] \\d \\d \\d
5xxx <-> [2-9] \\d \\d \\d
6xxx <-> [2-9] \\d \\d \\d
7xxx <-> [2-9] \\d \\d \\d
8xxx <-> [2-9] \\d \\d \\d
9xxx <-> [2-9] \\d \\d \\d
较短的正则表达式可能是19\\d{2}|[2-9]\\d{3}
。
答案 1 :(得分:0)
[19-99]
是character class运算符[..]
的错误用法。此部分会将一个字符与1
,9
至9
或9
中的一个字符匹配(即仅1
}或9
)。
我不知道为什么top(“working”)表达式如此复杂。你可以使用
\b(19|20)\d\d\b
为1900-2099,
\b19\d\d\b
1900-1999。双重转义mybackslashes以用于Java字符串。
(......在另一个问题发生变化后)
并且对于1900-9999,只需使用
\b(19|[2-9]9)\d{2}\b
答案 2 :(得分:0)
表达式可能如下所示:
^(19|[2-9]\\d)\\d{2}$
解释:
^
:字符串的开头
(19|[2-9]\\d)
:值19
或值20
至99
\\d{2}
:值00
至99
$
:字符串结尾