我了解正则表达式的基础知识,但我无法创建满足所有这些条件的正则表达式。谁能给我一个想法如何去做。
- 字符串长度必须至少为 20 个字符
- 字符串必须包含数字
- 数字前面必须有一些非数字字符
- 字符串结尾必须是格式为
DD/MM/YYYY HH:MM
的日期 - 是的,中间有一个空格,并且所有数字都必须存在。字符串中日期部分出现的数字不被视为规则2的可满足条件。 - 如果第一个数字之前有
$
符号,则该字符串无效
我尝试过使用代码:
if (sCurrentLine.length() > 20) {
for (int i=0; i <= sCurrentLine.length() - 1; i++) {
char character = sCurrentLine.charAt(i);
int ascii = (int) character;
if (((ascii >= 48) && (ascii <= 57)) && (i!=0)) {
char character2 = sCurrentLine.charAt(i-1);
int ascii2 = (int) character2;
if(!((ascii2 >= 48) && (ascii2 <= 57))) {
//
}
}
}
}
但是看起来太复杂了。
是否有正则表达式方法可以解决这个问题?
最佳答案
试试这个:
if (sCurrentLine.matches("(?=.{20})[^$]*[^\\d$]\\d.*\\d{2}/\\d{2}/\\d{4} \\d{2}:\\d{2}"))
使用断言有 20 个字符的前瞻检查长度(这当然意味着至少 20 个字符)。
您所需的数字逻辑可以表示为“以任意数量的非美元字符开头,一个非美元/数字字符,然后是一个数字”,这是正则表达式的第一部分。
最后一部分是日期格式。请注意,这仅检查正确位置是否有数字,而不是合法日期。
关于java - java中的正则表达式命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25508878/