java - 正则表达式 NOT 运算符不起作用

标签 java regex

我正在尝试过滤文件夹中的文件。我需要不以“.xml-test”结尾的文件。以下正则表达式按预期工作(ok1、ok2、ok3 = false、ok4 = true)

String regex = ".+\\.xml\\-test$";
boolean ok1 = Pattern.matches(regex, "database123.xml");
boolean ok2 = Pattern.matches(regex, "database123.sql");
boolean ok3 = Pattern.matches(regex, "log_file012.txt");
boolean ok4 = Pattern.matches(regex, "database.xml-test");

现在我只需要否定它,但由于某种原因它不起作用:

String regex = "^(.+\\.xml\\-test)$";

我仍然得到 ok1,ok2,ok3 = false, ok4 = true

有什么想法吗? (正如人们所指出的,这可以在没有正则表达式的情况下轻松完成。但是为了争论起见,假设我必须使用一个正则表达式模式而不是其他任何东西(即 !Pattern.matches(..); 也是不允许的))

最佳答案

我想你正在寻找:

if (! someString.endsWith(".xml-test")) {
  ...
}

不需要正则表达式。把这个扔进 FilenameFilter如下:

public accept(File dir, String name) {
  return ! name.endsWith(".xml-test");
}

关于java - 正则表达式 NOT 运算符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13254222/

相关文章:

java - MQ——删除队列中的所有消息

java - Eclipse 插件 - 刷新 eclipse 项目中的链接文件夹

java - 正则表达式提取组中的子字符串

ruby - =~ 运算符的顺序重要吗?

python - 正则表达式 - 一组可能的字符匹配

Java - 我们可以从初始化程序中返回吗?

java - Hibernate 一对多添加新子项

java - 创建binder时,Spring Cloud config + 总线对配置服务器调用两次

regex - Nginx 将规则路径重写为查询字符串

c++ - 查找文件名中的数字并与其他数字交叉引用