正则表达式确定文件是不是为 sql 文件 [重复]

Posted

技术标签:

【中文标题】正则表达式确定文件是不是为 sql 文件 [重复]【英文标题】:regex to determine if a file is an sql file [duplicate]正则表达式确定文件是否为 sql 文件 [重复] 【发布时间】:2015-07-21 12:21:20 【问题描述】:

我需要检查一个文件是否是基于字符串的 SQL 文件,例如:

com/cerner/careconcepts/allergy/data/action/sql/ActivityDataReltnQuery.sql

所以我想如下的正则表达式就足够了?这适用于http://regexpal.com/,但不适用于我的代码:

fileName.matches(".sql$")

这是我试图在 JarFile 中查找所有“.sql”文件的代码:

package jarreader;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class processJar 

public static void main(String[] args)

    //File file = new File(".");
    //for(String fileNames : file.list()) System.out.println(fileNames);

    try 
        JarFile jarFile = new JarFile("allergies-2.1.2.jar");
           Enumeration enumeration = jarFile.entries();
           while (enumeration.hasMoreElements())
               getSqlContent(enumeration.nextElement());
     catch (IOException e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    


private static void getSqlContent(Object obj) 

  JarEntry entry = (JarEntry)obj;
  String name = entry.getName();

  if(name.matches(".sql$"))
      System.out.println(name);
  



  

根据上述正则表达式,我没有得到任何输出名称。

【问题讨论】:

你试过调试你的代码吗?文件名是您所期望的吗? 另见***.com/questions/234249/… 您也可以使用name.toLowerCase().endsWith(".sql"); 来避免使用正则表达式。有时我更喜欢这种方式,因为如果 reg 更容易理解。前任。会变得更复杂。 【参考方案1】:

在您的正则表达式 .sql$ 中,. 匹配单个字符,然后它期待 sql。所以它不匹配任何名称。 name.matches(".sql$") 应该是

name.matches(".*\\.sql$")

【讨论】:

我同意拉胡尔的观点。 .* 表示任何字符,也不止一次。 \\.表示“点”本身。您必须用斜杠 (\) 转义点。在 java 字符串中,您必须使用双 1 (\\) 转义斜杠 是的,正确的理解。 非常感谢拉胡尔!这就解释了。你知道我将如何调整它以获取 SQL 文件名吗? 你几乎完成了。你可以做到的。 @Rookie:'tweak this...' 是什么意思?你得到了变量name。所以一切都很美好

以上是关于正则表达式确定文件是不是为 sql 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

检查文件在php中是不是存在正则表达式[重复]

通过正则表达式判断 SQL 命令是不是为 UPDATE 命令

mysql 必知必会整理—sql 正则表达[五]

如何在正则表达式中包含变量[重复]

正则表达式 判断文件名后缀是不是为 csv xls xlsx

用于重命名文件的正则表达式