public static MovieData parseMovieFileName(File fileEntry) throws Exception {
        String fileName = fileEntry.getName();
        System.out.println(fileName);
        MovieData data = null;
        if (data == null) {
            // Rule1: Braveheart.1995.1080p.BrRip.x264.YIFY+HI
            //        ^^^^^^^^^^ ^^^^ ^^^^^ ^^^^^^^^^^^^^^^^^^
            //        Name       Year Res   Publisher
            Pattern p = Pattern.compile("(.*)[ .]\\(?(\\d{4})\\)?.*[ .](\\d{3,4}p)[ .]?(.*)", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(fileName);
            if (m.matches()) {
                data = new MovieData();
                data.file = fileEntry;
                data.fileMovieName = m.group(1);
                data.fileMovieYear = m.group(2);
                data.fileResolution = m.group(3);
                data.filePublisher = m.group(4);
                System.out.println("Match Rule 1: " + data.getRawDataString());
            }
        }
        if (data == null) {
            // Rule2: Der Untergang (Downfall) (2004) [1080p] x264 - Jalucian
            //        ^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^   ^^^^^  ^^^^^^^^^^^^^^^^^^
            //        Name                      Year   Res    Publisher
            Pattern p = Pattern.compile("(.*)[ .]\\(?(\\d{4})\\)?.*[ .]\\[(\\d{3,4}p)\\][ .]?(.*)", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(fileName);

            if (m.matches()) {
                data = new MovieData();
                data.file = fileEntry;
                data.fileMovieName = m.group(1);
                data.fileMovieYear = m.group(2);
                data.fileResolution = m.group(3);
                data.filePublisher = m.group(4);
                System.out.println("Match Rule 2: " + data.getRawDataString());
            }
        }
        if (data == null) {
            // Rule3: Inglourious.Basterds.1080p.BluRay.x264.anoXmous_
            //        ^^^^^^^^^^^^^^^^^^^^ ^^^^^  ^^^^^^^^^^^^^^^^^^
            //        Name                 Res    Publisher
            Pattern p = Pattern.compile("(.*)[ .](\\d{3,4}p)[ .]?(.*)", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(fileName);

            if (m.matches()) {
                data = new MovieData();
                data.file = fileEntry;
                data.fileMovieName = m.group(1);
                data.fileResolution = m.group(2);
                data.filePublisher = m.group(3);
                System.out.println("Match Rule 3: " + data.getRawDataString());
            }
        }
        if (data == null) {
            // Rule4: Mononoke.hime.[Princess.Mononoke].1997.HDTVRip.H264.AAC.Gopo
            //        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^^^^^^^^
            //        Name                              Year Publisher
            Pattern p = Pattern.compile("(.*)[ .]\\(?(\\d{4})\\)?[ .](.*)", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(fileName);

            if (m.matches()) {
                data = new MovieData();
                data.file = fileEntry;
                data.fileMovieName = m.group(1);
                data.fileMovieYear = m.group(2);
                data.filePublisher = m.group(3);
                System.out.println("Match Rule 4: " + data.getRawDataString());
            }
        }
        return data;
    }