字符串的正则表达式包含不在特定集合中的字符

时间:2014-09-12 15:12:57

标签: java regex string pattern-matching

我尝试使用Java中的正则表达式确定字符串是否包含不在集合中的任何字符。

我有以下一组有效字符" @ ADEFIKRVXY156"。空白字符可以忽略,可以认为是有效的。

输入是一个字符串,它是一系列字母数字字符或空格。我想写的正则表达式将使Java的Pattern.matcher(String)返回true,如果输入的String包含不在我的有效集中的任何字符。如果字符串包含一些有效字符和一些无效字符,则应将整个字符串评估为无效。有效性的唯一情况是整个字符串仅包含有效集中的字符。现在,每个字符都必须在字符串中针对有效字符集进行评估,而不是字符串匹配或模式匹配。

有效的示例输入(Java Pattern.matcher应返回false): " @"," F"," F I"," R I"

无效的示例输入(Java Pattern.matcher应返回true): " 4 I"," FT"," 4 B"

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

如果空字符串有效,请尝试[@ADEFIKRVXY156\\s]*(+而不是*)。

String[] valid    = { "@", " F", " F I", "R I" };
String[] notValid = { " 4 I", " FT", " 4 B" };
String pattern    = "[@ADEFIKRVXY156\\s]*";
for (String s : valid) 
    System.out.println(!s.matches(pattern));
for (String s : notValid) 
    System.out.println(!s.matches(pattern));

输出:

false
false
false
false
true
true
true

答案 1 :(得分:2)

它允许在字符类中出现一个或多个字符

[@ADEFIKRVXY156\\s]+

代码:

String[] valid    = { "@", " F", " F I", "R I" };
String[] notValid = { " 4 I", " FT", " 4 B" };
String pattern    = "[@ADEFIKRVXY156\\s]+";
for (String s : valid) 
    System.out.println(!s.matches(pattern));
for (String s : notValid) 
    System.out.println(!s.matches(pattern));

答案 2 :(得分:0)

如果您的目标是(Java Pattern.matcher应该返回true),当无效并且您不打算使用匹配值时,您应该使用否定的字符类结构[^

这里有正则表达式:

.*[^@ADEFIKRVXY156\s]

DEMO

当正则表达式找到不在你范围内的第一个字符时,它将返回true。