Вы можете получить свои совпадения, не используя [\s\S]*
или однострочный вариант, сопоставив все строки, которые не начинаются с [C]
\bWARN\h+.*(?:\R(?!\[C]).*)*
Объяснение
\bWARN
Соответствует WARN, которому предшествует граница слова, чтобы не быть частью большего слова \h+.*
Соответствует 1+ горизонтальным пробелам (?:
Группа без захвата \R(?!\[C]).*
Соответствует юникодной последовательности новой строки, утверждая, что строка не начинается с [C]
)*
Закрыть группу и повторить 0+ раз
Regex demo | Java демо
Например:
String regex = "\\bWARN\\h+.*(?:\\R(?!\\[C]).*)*";
String string = "[C] L1250 WARN k2 bw34 Flex - Sockets:<16>, ThreadsPerCore:<1>\n"
+ "[C] L1250 WARN For abcd (analytical and transactional workloads). For 12s Systems and above, should be\n"
+ " disabled.\n"
+ "[C] L1250 INFO For abcd (analytical workloads), Hyperthreading should be enabled , 8s, 12s, 14d, 34t\n"
+ " d above.\n"
+ "[C] L1250 WARN Intel's Hyperthreading on 18+ Socket system disabled. Should be disabled urgently\n"
+ " fix it!\n"
+ "[C] L1300 OK CPU governors set as recommended\n"
+ "[C] L1250 WARN Intel's Hyperthreading on 8+ Socket system disabled.";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println(matcher.group(0));
}
Выход
WARN k2 bw34 Flex - Sockets:<16>, ThreadsPerCore:<1>
WARN For abcd (analytical and transactional workloads). For 12s Systems and above, should be
disabled.
WARN Intel's Hyperthreading on 18+ Socket system disabled. Should be disabled urgently
fix it!
WARN Intel's Hyperthreading on 8+ Socket system disabled.
Если [C]
не является границей другим вариантом является проверка, не содержит ли следующая строка одну из WARN
, INFO
или OK
\bWARN\h+.*(?:\R(?!.*\h(?:WARN|INFO|OK)\h).*)*
Regex demo
In Java
String regex = "\\bWARN\\h+.*(?:\\R(?!.*\\h(?:WARN|INFO|OK)\\h).*)*";