【发布时间】:2019-06-26 13:30:42
【问题描述】:
我应该检查一个字符串是否匹配某个模式。模式如下
dd.mm.yyyy HH:mm;score;duration
- 注意 yyy 和 HH 之间的空格
- score 是一个 int 值
- duration 是双精度值
如何针对上述问题构建正则表达式模式?我在代码中遗漏了什么或做错了什么?
我主要对分号、冒号、空格键等特殊字符以及何时使用\ 或\\ 感到困惑
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)){
...
【问题讨论】:
-
是否需要使用正则表达式?因为通常尝试使用正则表达式来检查日期是否有效并不是最好的方法。 (例如:您如何告诉您的正则表达式 29. 2 月仅在某些特定年份有效?)
-
要验证您的正则表达式,您可以使用LINK。
-
如果我理解正确,您不只匹配日期,这是一个日期加上字符串中的 2 个其他值?也许您可以在您的问题中添加一些示例。
-
这可以是一个
(\d{1,2}).(\d{1,2}).(\d{4})\s(\d{1,2}):(\d{1,2});(\d*);(\d*\.\d*)正则表达式,它可以为您提供所有这些元素。请注意,这不会验证实际日期,例如,如果您在 dd 中得到一个两位数 48,则正则表达式仍将匹配。
标签: java