在Java中设置正则表达式模式

时间:2014-09-19 13:09:21

标签: java regex

我在尝试创建一个用于识别文件名字符串的工作正则表达式模式时遇到了一些困难。

Pattern pattern = Pattern.compile("(\\w+)(\\.)(t)(x)(t)(\\s$|\\,)");

在我的示例输入中使用matcher类的.find()时,请说

"file1.txt,file2.txt "

我返回true,这很好,但是其他错误输入也会返回true。

此错误输入包括以下字符串:

"file1.txt,,file2.txt "

"file%.text " 

我一直在咨询这个网站,因为我一直在努力构建它们,我很确定我错过了一些相当明显的东西。 Link

4 个答案:

答案 0 :(得分:3)

这可以帮到你:

Pattern pattern = Pattern.compile("(.*?\\.\\w+)(?:,|$)");
String files = "file1.txt,file2.txt";
Matcher mFile = pattern.matcher(files);
while (mFile.find()) {
    System.out.println("file: " + mFile.group(1));
}

输出:

file: file1.txt
file: file2.txt

仅包含.txt个文件:(.*?\\.txt)(?:,|$)

答案 1 :(得分:2)

要验证文件名列表,您可以使用以下解决方案:

//                                  | preceded by start of input, or
//                                  |    | comma, preceded itself by either word or space
//                                  |    |              | file name
//                                  |    |              |     | dot
//                                  |    |              |     |    | extension
//                                  |    |              |     |    |  | optional 1 space
//                                  |    |              |     |    |  |   | followed by end of input
//                                  |    |              |     |    |  |   |     | or comma, 
//                                  |    |              |     |    |  |   |     | followed itself by word character
Pattern pattern = Pattern.compile("(?<=^|(?<=[\\w\\s]),)(\\w+)(\\.)txt\\s?(?=$|,(?=\\w))");
String input = "file1.txt,file2.txt";
String badInput = "file3.txt,,file4.txt";
String otherBadInput = "file%.txt, file!.txt";
Matcher m = pattern.matcher(input);
while (m.find()) {
    // printing group 1: file name
    System.out.println(m.group(1));
}
m = pattern.matcher(badInput);
// won't find anything
while (m.find()) {
    // printing group 1: file name
    System.out.println(m.group(1));
}
m = pattern.matcher(otherBadInput);
// won't find anything
while (m.find()) {
    // printing group 1: file name
    System.out.println(m.group(1));
}

<强>输出

file1
file2

答案 2 :(得分:1)

朴素的方式:

    public boolean validateFileName(String string){
      String[] fileNames= string.split(",");
      Pattern pattern = Pattern.compile("\b[\w]*[.](txt)\b"); /*match complete name, not just pattern*/
      for(int i=0;i<fileNames.length;i++){
          Matcher m = p.matcher(fileNames[i]);
          if (!m.matches())
              return false;
      }
      return true;
    }

答案 3 :(得分:1)

Pattern p = Pattern.compile("((\\w+\\.txt)(,??|$))+");

以上模式允许“file1.txt ,, file2.txt”通过,但不会获得两个逗号的空文件。 正确处理其他字符串“file1.txt,file2.txt”和“file%txt”。