正则表达式确定文件是不是为 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 文件 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
通过正则表达式判断 SQL 命令是不是为 UPDATE 命令