我正在尝试解析从网络设备返回的字符串以查看是否存在错误。
我正在使用的测试是,如果收到的字符串中没有“invalid”一词,则没有错误。我不确定正则表达式是否正确。
Pattern noErrorsPattern = Pattern.compile("^(?!.*(invalid)).*$");
Matcher noErrorMatcher = noErrorsPattern.matcher(receivedDataString);
if (!noErrorMatcher.matches()) {
throw new Exception("input has error");
}
receivedDataString 中没有字符串“invalid”。我通过将其粘贴到编辑器中并搜索它来检查它 - 没有找到。 然而,在调试器中单步执行时,将会抛出异常。
--澄清-- 我简化了问题描述,但这可能有点误导。细节: 对于每个命令,我都有一个“FieldPattern”正则表达式来从返回的文本中提取数据字段,还有另一个“NoError”正则表达式来检查是否存在错误。可以为“添加新条目”之类的命令精确设置 NoError 正则表达式,这样如果找到此字符串,则操作确实成功。如果没有为命令指定任何内容,则字符串中不出现“invalid”的正则表达式是默认的 NoError 模式。
最佳答案
问题是您匹配了多行。默认情况下,Java 正则表达式中的点不匹配行终止符。
因此,在编译正则表达式时需要指定Pattern.DOTALL
。
注意:由于您的正则表达式已经锚定,您可以使用 .find()
而不是 .matches()
,因为后者将锚定正则表达式(并且一个那天,你可能不希望那样)。
关于java - 正则表达式否定某个单词不起作用(Java 7),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14188285/