Java 使用负先行正则表达式检查输入

Java input check using negative lookahead regex

我正在尝试使用正则表达式否定先行检查是否输入了任何无效字符。我要检查的字符是除 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");

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

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

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

基本上,您想匹配 而不是 class.
中的任何内容 Pattern p = Pattern.compile("[^\d\srx*+\-/)]");

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