java - 正则表达式否定某个单词不起作用(Java 7)

标签 java regex-negation

我正在尝试解析从网络设备返回的字符串以查看是否存在错误。

我正在使用的测试是,如果收到的字符串中没有“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/

相关文章:

c# - 正则表达式仅限制大写

正则表达式匹配除引号之间的单词之外的所有内容

java - Scala 解析 RSS/Atom 提要

java - Netbeans IDE 外的堆空间问题

java - 根据单击的项目膨胀操作模式菜单

java - 测试用例以确保数据无法加载

javascript 正则表达式否定检测 URL 不包含给定域

regex - 匹配两个或多个不相同的字符

regex - Unix grep 正则表达式包含 'x' 但不包含 'y'

Java ASN.1 编译器