У меня очень длинное регулярное выражение, которое, похоже, имеет проблемы, но только при импорте из текстового файла. Я сузил к следующему разделу (показано здесь как буквенная строка):Не удается избежать закрывающей круглой скобки в Java?
"(?i)(?<!\\w)\\w{2,3}(?=\\))"
Как вы можете видеть, ближе к концу, я пытаюсь избежать закрывающую скобки для опережающего просмотра. Теперь, если это жестко закодировано, например:
Pattern myPattern = Pattern.compile("(?i)(?<!\\w)\\w{2,3}(?=\\))");
Он работает полностью, как ожидалось. Если, однако, я прочитал его из текстового файла, например:
File patternFile = new File("patterns.txt");
List<String> patternText = FileUtils.readLines(patternFile);
String ucText = patternText.get(0).trim();
Pattern myPattern = Pattern.compile(ucText);
Тогда я получаю сообщение об ошибке:
Exception in thread "Thread-4" java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 25
(?i)(?<!\\w)\\w{2,3}(?=\\))
^
Итак, почему же это происходит? Почему избегает закрывающей круглой скобки, когда она закодирована, но не при чтении из текстового файла?
'только при импорте из текста file' Вы должны напечатать, что на консоли. Если он печатает '(? I) (? sln
Используйте только \\ для регулярного выражения, определенного в строке, в противном случае используйте single \ – MaxZoom