正则表达式的Java问题

时间:2013-08-05 12:49:16

标签: java regex string

我在使用以下代码时遇到了一些麻烦:

^([0-9]{17})\.zip$

我认为这应该可以阻止任何超过17个字符的字符串通过。但是,它允许名称超过17个字符的文件通过。

知道可能是什么问题,或者我的记法错了吗?

提前致谢

5 个答案:

答案 0 :(得分:3)

您的正则表达式将匹配由17个数字(0到9)组成的文件名,以“.zip”结尾。如果你的代码允许更长的文件名,那么它很可能是使用它的代码的错误,而不是正则表达式本身。你也可以发布一些代码吗?

答案 1 :(得分:2)

您需要将表达式转换为:

^([0-9a-zA-Z]{,17})\.zip$

否则它只考虑数字。

答案 2 :(得分:2)

你的正则表达式允许的文件名完全 21个字符:17位数,1点然后是“zip”。

将其限制为17的一种方法是:

^([0-9]{13})\.zip$

答案 3 :(得分:2)

鉴于您希望允许任何少于17个字符的字符串,您应该使用"。",它匹配任何字符而不仅仅是数字或字母。

尝试将正则表达式更改为:^。{1,17} \ .zip $(由于这是Java,因此可以使用双反斜杠)

@Test
public void testRegexShouldMatch() {
    Pattern pattern = Pattern.compile("^.{1,17}\\.zip$");
    Matcher matcher = pattern.matcher("some file name.zip");
    assertTrue(matcher.find());
}

@Test
public void testRegexShouldNotMatchAsOver17Chars() {
    Pattern pattern = Pattern.compile("^.{1,17}\\.zip$");
    Matcher matcher = pattern.matcher("some long file name.zip");
    assertFalse(matcher.find());
}

答案 4 :(得分:0)

您的表达式仅匹配17位数后跟.zip。如果你不仅要匹配数字而且要匹配chracters并放宽约束最多 17位(并且至少为1),你应该将你的axpression改为:

^([\w]{1,17})\.zip$
相关问题