Есть ли способ создать регулярное выражение, которое будет проверять правильность «закрытия» стиля проверки (который начинается с //)?
// CHECKSTYLE:OFF
protected void doSomething() {
}
// CHECKSTYLE:ON
// CHECKSTYLE:OFF
protected void doSomethingElse() {
// CHECKSTYLE:ON
}
Если есть опечатка в первом CHECKSTYLE: ON, остальные checkstyles будут проигнорированы.
У меня есть плагин IntelliJ под названием CheckStyle-IDEA, и я хочу написать правильный <module> для перехвата «незакрытых» тегов CHECKSTYLE.




Я не знаю, подойдет ли здесь чистое регулярное выражение. Ваша проблема - это то, чем занимаются парсеры. На самом деле, я даже не знаю, как бы мы обнаружили // CHECKSTYLE:ON с опечаткой. Но одним из вариантов здесь было бы просто сканировать ваш файл построчно и потерпеть неудачу, если мы когда-нибудь встретим два // CHECKSTYLE:OFF подряд. Если это произойдет, то это означает, что либо стиль проверки ON был полностью опущен, либо был введен неверно.
static final String CHECK_ON = "// CHECKSTYLE:ON";
static final String CHECK_OFF = "// CHECKSTYLE:OFF";
File file = new File("your_input.ext");
boolean checkstyleIsOn = false;
try {
Scanner sc = new Scanner(file);
int lineNum = 0;
while (sc.hasNextLine()) {
++lineNum;
String line = sc.nextLine();
if (CHECK_OFF.equals(line)( {
if (!checkStyleIsOn) {
System.out.println("Found extra checkstyle off at line " + lineNum);
break;
}
else {
checkStyleIsOn = false;
}
}
if (CHECK_ON.equals(line)( {
if (checkStyleIsOn) {
System.out.println("Found extra checkstyle on at line " + lineNum);
break;
}
else {
checkStyleIsOn = true;
}
}
}
sc.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
Я чувствую, что вам действительно нужен синтаксический анализатор, а не регулярное выражение. Каков ваш ожидаемый результат от того, что вы здесь имеете в виду?