【问题标题】:Exclude in regular expressions在正则表达式中排除
【发布时间】:2013-06-08 11:56:43
【问题描述】:

我想读取文件夹中不包含.temp 作为扩展名的文件。我想为此使用正则表达式。您如何在正则表达式中使用排除项来做到这一点?

【问题讨论】:

    标签: java regex spring


    【解决方案1】:

    这部分告诉寻找特定的字符数组:[0-9]。如果你想排除它,你只需在它前面添加一个^(暗示“不是”)。就像 [^0-9] 表示“不是数字”。

    因此,要回答您的问题,您可以在正则表达式中包含以下内容:

       ^((?!\.temp).)*$
    

    上面的这个正则表达式将匹配任何不包含 .temp 的行

    【讨论】:

      【解决方案2】:

      不要打扰,直接否定测试:

      private static final Pattern NOTME = Pattern.compile("\\.temp$");
      
      // in code
      
      if (NOTME.matcher(input).find())
          // illegal!
      

      但实际上,您应该使用:

      if (input.endsWith(".temp"))
          // illegal
      

      另外,如果您使用 Java 7,请放弃 File 并使用 Files 和 Path。

      【讨论】:

        【解决方案3】:

        知道它不是正则表达式,但为了便于阅读,我会使用

        !fileName.endsWith(".temp")
        

        【讨论】:

          【解决方案4】:

          你可以尝试这样的事情,基于 Java 的 FilenameFilter 接口:

          package dk.tbsalling;
          
          import java.io.File;
          import java.io.FilenameFilter;
          
          public class FileDemo {
             public static void main(String[] args) {
          
                File f = null;
                File[] paths;
          
                try{      
                   f = new File("d:/tmp");
          
                   FilenameFilter fileNameFilter = new FilenameFilter() {
          
                      @Override
                      public boolean accept(File dir, String name) {
                         return name.matches(".+(?<!\.temp)");
                      }
                   };
          
                   paths = f.listFiles(fileNameFilter);
          
                   for(File path:paths)
                   {
                      System.out.println(path);
                   }
                }catch(Exception e){
                   e.printStackTrace();
                }
             }
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-12
            • 2020-08-18
            • 1970-01-01
            • 2016-11-27
            • 2021-09-16
            • 2014-04-11
            相关资源
            最近更新 更多