正则表达式URL中的有效图像

时间:2018-04-05 09:03:22

标签: java regex regex-negation

首先,我知道stackoverflow中有大量的正则表达式线程,我检查了一堆,但是这里真的很难匹配正确的句子。

我目前要做的是匹配这些字符: - a-z - A-Z - 0-9 - 。()〜-_ []

基于此正则表达式,将在此之后执行的操作是替换此处不匹配的所有字符。

我使用的文件名为例: - 12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0 @#$%“& *()!ßöäüÄÜÖ”'] [} {<>:;,º.jpg

    private static final String FOLDER = "/path/to/my/folder";
private static final String URL_VALID_REGEX = "a-zA-Z0-9\\.\\(\\)\\[\\]\\-~_";

public static void main(String[] args) {
    File imagesDirPath = new File(FOLDER);
    Pattern p = Pattern.compile("[" + URL_VALID_REGEX + "]");

    final String[] listImages = imagesDirPath.list(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            Matcher m = p.matcher(name);

            if (!m.matches()){
                File renamedFile = new File(FOLDER + File.separator + name);
                name = name.replaceAll("[^" + URL_VALID_REGEX + "]", "");
                renamedFile.renameTo(new File(FOLDER + File.separator + name));
            }

            System.out.println(name);

            final String extension = FilenameUtils.getExtension(name);
            final boolean isAcceptedExtesion = getAcceptedFileFormatList().contains(extension);
            final long lastModified = new File(dir, name).lastModified();
            return isAcceptedExtesion;
        }
    });
}

正如你在代码中看到的那样,字符的替换发生时正则表示有效的正则表达式,但我也不确定它是不是应该如何,因为所有的匹配总是为假。

第一个问题:即使文件名正确,匹配也始终为false,这会导致创建新文件并更改上次修改日期,这对于保持相同非常重要

第二个问题:逗号和星号始终保留在文件名中,但这也可能是错误的正则表达式

有效名称的示例: - 12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0_~()] [。jpg

我在这里找不到我无法找到的东西?

1 个答案:

答案 0 :(得分:-1)

我在记事本++中复制了它,但我会尝试在java中完成它。

几乎没有问题。您应该匹配有问题的字符,如果找到这些字符,请替换它们。使用find()而不是匹配,因为您不需要匹配整个字符串。

在记事本中,我只需用“”替换[^ a-zA-Z0-9。()[] \ - ~_] +,我得到你想要的东西。

在java中

import java.util.regex.*;

public class HelloWorld{

public static void main(String[] args) {
     String wrong="12345677-fieberthermometer-fuer-schlaefe-und-ohr-digital-mapa-nuk-d0@#$%\"&*()!ßöäüÄÜÖ\"'][}{<>:;,º.jpg";
     String pattern="[^a-zA-Z0-9\\.\\(\\)\\[\\]\\-~_]+";
     Pattern p = Pattern.compile(pattern);
     Matcher m = p.matcher(wrong);
     if (m.find()){
                right = wrong.replaceAll(pattern, "");
                System.out.println(right);
     }
  }
}