java寻找日期格式的最佳正则表达式模式
我应该检查一个字符串是否符合某种模式。模式如下
dd.mm.yyyy HH:mm;score;duration
- 注意yyy和HH之间的空格
- 分数是一个整数
- 持续时间是一个双倍值
关于上述问题,如何构造正则表达式模式?我在代码中遗漏了什么或做错了什么
我主要对分号、冒号、空格键等特殊字符感到困惑,以及何时使用\
或\\
public HighscoreEntry(String data) {
String pattern= "^(3[01]|[12][0-9]|0?[1-9])\\.\\(1[0-2]|0?[1-9])\\.\\(20[0-9]{2})\\s\\(2[0-4]|[01][0-9])\\:\\(5[0-9]|[0-4][0-9]\\;\\d+\\;\\d*\\.\\d+$";
if(data.matches(pattern)){
...
# 1 楼答案
更放松的表情
一个考虑了可能的日期和时间值
要在Java字符串中使用它们,每个\都需要由\转义,所以
\
->\\
我还没有测试这些模式,所以可能存在一些拼写错误
# 2 楼答案
既然问题是:找到最佳正则表达式模式,而不是什么是最佳正则表达式模式,我将回答这个问题。我使用的技术或多或少是一种分而治之的方法
首先,找到分隔符。然后你可以这样构建你的模式:
然后,字段可能有数据类型。请注意,并不是每个域(字符串表示)都是正则的!所以先检查一下。在你的例子中,你想要这样的东西:
其中
intPattern(n)
给出了一个正好有n
个数字的无符号整数的模式,intPattern()
给出了任意多个数字的模式优点:
但你的例子表明,你想要的不仅仅是验证模式。你想要的是语义学。你想检查一下,那个dd.MM。yyyy实际上是一个有效日期。这是不可能的,因为正确日期的语言(通常)是不规则的。如果只考虑一个有限子集的日期(例如从1990到2400),则<可以EEE>做到这一点(有限的语言总是规则的),但它将是一个混乱。p>