我尝试使用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"
感谢您的帮助
答案 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]
当正则表达式找到不在你范围内的第一个字符时,它将返回true。