输入文本文件的内容如下:
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。请帮助我使用正则表达式。
答案 0 :(得分:0)
如"^(TIMINCY|DETAIL)[\.]+[a-zA-z\s.]+"
"^"
- 匹配行的开头
"(TIMINCY|DETAIL)"
- 匹配TIMINCY或DETAIL
"[\.]"
- 匹配点字符一次或多次
"[a-zA-z\s.]+"
- 在这里你允许的字符出现一次或多次
答案 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()来查找你不想要的模式。