【问题标题】:Java input check using negative lookahead regex使用负前瞻正则表达式的 Java 输入检查
【发布时间】:2017-03-29 17:00:12
【问题描述】:

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

谁能给我一些指导,告诉我如何修改这个正则表达式以符合我的规范。

【问题讨论】:

  • "yourString".matches("[^-\\d*/+xr]+")怎么样

标签: java regex regex-lookarounds


【解决方案1】:

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

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

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

【讨论】:

  • 这似乎对我不起作用。对正则表达式使用测试 if(m.matches()) 和字符串“(4+3+qfadfcxbvs)”不会返回 true。知道可能出了什么问题吗?
  • @prior - 我不使用 Java,我不确定 match() 是否需要匹配整行。如果是这种情况,请使用".*[^\\d\\srx*+\\-/)].*"。关于正则表达式[^\d\srx*+\-/)],给定您的字符串,它与这些突出显示的字符匹配。 ( 4+3+ q f a d f c x b v s)
  • 我知道出了什么问题。我切换回使用 find() 方法并且它有效。感谢您的帮助!
猜你喜欢
  • 2012-06-22
  • 2012-12-07
  • 2021-10-11
  • 2011-10-14
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多