使用正则表达式验证文本文件内容

时间:2017-08-11 14:05:41

标签: java regex

输入文本文件的内容如下:

TIMINCY ........许多任意字符包括白色空格和标签

细节........许多任意字符包括。白色空格和标签

细节........许多任意字符包括。白色空格和标签

细节........许多任意字符包括。白色空格和标签

。 (包含DETAILS的任意数量的行)

TIMINCY ........许多任意字符包括白色空格和标签

细节........许多任意字符包括。白色空格和标签

细节........许多任意字符包括。白色空格和标签

细节........许多任意字符包括。白色空格和标签

。(等等)

问:我需要使用正则表达式验证文件,以便文件的内容不是 根据上面给出的模式,我可以抛出CustomException。

请告诉我们您是否可以提供帮助。任何帮助都会得到诚挚的赞赏。

String patternString = "TMINCY"+"[.]\\{*\\}"+";"+"["+"DETAILS"+"[.]\\{*\\}"+";"+"]"+"\\{*\\}"+"]"+"\\{*\\};";
Pattern pattern = Pattern.compile(patternString );
        String messageString = null;
StringBuilder builder = new StringBuilder();
        try (BufferedReader reader = Files.newBufferedReader(curracFile.toPath(), charset)) {
            String line;
            while ((line = reader.readLine()) != null) {
                builder.append(line);
                builder.append(NEWLINE_CHAR_SEQUENCE);
            }

            messageString = builder.toString();

        } catch (IOException ex) {
            LOGGER.error(FILE_CREATION_ERROR, ex.getCause());
            throw new BusinessConversionException(FILE_CREATION_ERROR, ex);
        }   
        System.out.println("messageString is::"+messageString);
        return pattern.matcher(messageString).matches();

但是正确的文件正在返回FALSE。请帮助我使用正则表达式。

2 个答案:

答案 0 :(得分:0)

"^(TIMINCY|DETAIL)[\.]+[a-zA-z\s.]+"

之类的内容

"^" - 匹配行的开头
"(TIMINCY|DETAIL)" - 匹配TIMINCY或DETAIL
"[\.]" - 匹配点字符一次或多次
"[a-zA-z\s.]+" - 在这里你允许的字符出现一次或多次

参考:Oracle Documentation

答案 1 :(得分:0)

当你在线上迭代时,你可以逐行尝试

Pattern p = Pattern.compile("^(?:TIMINCY|DETAILS)[.]{8}.*");
//Explanation:
// ^ : Matches the begining of the string.
// (?:): non capturing group.
// [.]{8}: Matches a dot (".") eight times in a row.
// .*: Matches everything until the end of the string
// | : Regex OR operator

String line = reader.readLine()
Matcher m;
while (line  != null) {
    m = p.matcher(line);
    if(!m.matches(line))
        throw new CustomException("Not valid");
    builder.append(line);
    builder.append(NEWLINE_CHAR_SEQUENCE);
    line = reader.readLine();
}

另外:如果整个STRING与你的正则表达式匹配,Matcher.matches()返回true,我建议使用Matcher.find()来查找你不想要的模式。

Matcher (Java 7)