0

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

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

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

知道可能是什么问题,或者我的符号是否错误?

提前致谢

4

5 回答 5

3

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

于 2013-08-05T12:52:19.107 回答
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());
}
于 2013-08-05T13:43:46.590 回答
2

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

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

^([0-9]{13})\.zip$
于 2013-08-05T12:53:37.883 回答
2

您需要将表达式转换为:

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

否则它只考虑数字。

于 2013-08-05T12:53:06.727 回答
0

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

^([\w]{1,17})\.zip$
于 2013-08-05T13:44:03.417 回答