Следующая режима успешно работает при тестировании здесь, но когда я пытаюсь внедрить его в свой код Java, она не вернет матч. Он использует негативное образование, чтобы гарантировать, что новые линии не происходит между основным уровнем и спальнями . Почему это не работает в Java? < /P>
regex < /strong> < /p>
^\s*\bMAIN LEVEL\b\n(?:(?!\n\n)[\s\S])*\bBedrooms:\s*(.*)< /code> < /p>
java < /strong> < /p>
pattern = Pattern.compile("^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
match = pattern.matcher(content);
if(match.find())
{
//Doesn't reach here
String bed = match.group(1);
bed = bed.trim();
}
< /code>
content - это просто строка, чтение из текстового файла, который содержит точный текст, показанный в демо, связанный выше. < /p>
File file = new File("C:\\Users\\ME\\Desktop\\content.txt");
content = new Scanner(file).useDelimiter("\\Z").next();
< /code>
UPDATE:
I changed my code to include a multiline modifier (?m)< /code>, но он распечатывает "null". < /p>
pattern = Pattern.compile("(?m)^\\s*\\bMAIN LEVEL\\b\\n(?:(?!\\n\\n)[\\s\\S])*\\bBedrooms:\\s*(.*)");
match = pattern.matcher(content);
if(match.find())
{ // Still not reaching here
mainBeds=match.group(1);
mainBeds= mainBeds.trim();
}
System.out.println(mainBeds); // Prints null
Подробнее здесь: https://stackoverflow.com/questions/344 ... ng-in-java