使用负前瞻性正则表达式进行Java输入检查

时间:2017-03-29 17:00:13

标签: java regex regex-lookarounds

我正在尝试使用正则表达式否定前瞻来检查是否输入了任何无效字符。我要检查的字符是除了0-9,空格,*,/,+, - ,r,x之外的所有字符。

String word = "(l4+3q)*(5+7-8)/(5)";
Pattern p  = Pattern.compile("(?![\\d\\srx*+-/)]+)");
Matcher m = p.matcher(word);

if(m.matches()) System.out.println("NO");

在当前的测试代码中,我使用的每个字符串都返回false。

任何人都可以就如何修改此正则表达式以符合我的规范提供一些指导。

1 个答案:

答案 0 :(得分:0)

您不想在课堂上按此顺序使用此+-/ 这种方式使用的-是范围运算符,而不是文字 - 要使它成为文字,将其添加到结尾或开头,或将其转义为 它可以在任何地方。

基本上,您希望匹配该班级中的任何内容 Pattern p = Pattern.compile("[^\\d\\srx*+\\-/)]");

如果匹配if( m.matches() ),则确实发现了非法字符 或者,
如果它不匹配if( !m.matches() ),则它没有找到非法字符。