如何检查字符串是否只包含字母,数字和双反斜杠

时间:2016-05-06 18:23:41

标签: java regex

如何编写方法来检查字符串是否包含数字,字母,特定字符(+_-/)并且只包含双反斜杠(\\)。

示例:

a2b/\ - false

d+sd\\ff - true

我试过了:

stringExample.matches("^[a-z-A-Z-0-9 +_-/]+");

...但它与双反斜杠(\\)不匹配。

4 个答案:

答案 0 :(得分:2)

由于反斜杠通常用作转义字符,因此必须通过\\转义它们以表示单个斜杠,因此两个连续的反斜杠将使用\\\\

因此,对于表达式允许这些字符和仅两个反斜杠的集合,您可以使用:

stringExample.matches("^([\\w\\s+\\-/]|(\\\\\\\\))+$");

这可以解释如下:

^             # Beginning of expression
(             # Beginning of group
[\\w\\s+\\-/] # Match any alphanumeric or underscore (\w), space (\s), or +, - or \
|             # OR
(\\\\\\\\)    # An explicit double-slash
)             # End of group
+             # Allow one or more instances of the previous group
$             # End of expression

答案 1 :(得分:0)

\是一个特殊的角色。它具有正则表达式(转义)的功能。这意味着您需要将其转义以捕获它本身的角色。

\\将'\'表示为角色

答案 2 :(得分:0)

这可能会有所帮助:

private static void checkdoubleSlash(String a) {
        if(a.contains("\\\\"))
            System.out.println("True");
        else
            System.out.println("False");
    }

答案 3 :(得分:0)

首先,编写它的模式不会编译:

^[a-z-A-Z-0-9 +_-/]+

因为_-/被解释为范围,但这无效。 最好将-移到最后,使其不是范围:

^[a-z-A-Z-0-9 +_/-]+

并删除重复的-

^[a-zA-Z0-9 +_/-]+

接下来,请注意[...]是针对单个字符的。并且您不允许单\,只允许加倍\\,因此这是一个双字符模式。 要实现这一点,正则表达式应该是:

^([a-zA-Z0-9 +_/-]|double-backslash)+

我在那里写了#34;双反斜杠,因为这需要一些额外的解释。要写它,不仅仅是\\,因为在Java字符串中你需要转义反斜杠,所以\\\\。在正则表达式中,您需要再次转义它们。所以你需要的最终正则表达式是:

^([a-zA-Z0-9 +_/-]|\\\\\\\\)+

进行一些单元测试:

public boolean testMatch(String s) {
    return s.matches("^([a-zA-Z0-9 +_/-]|\\\\\\\\)+");
}

@Test
public void should_match_string_with_double_backslash() {
    assertTrue(testMatch("d+sd\\\\ff"));
}

@Test
public void should_not_match_string_with_single_backslash() {
    assertFalse(testMatch("a2b/\\"));
}