2015-11-08 3 views
-4

Я разбираю много файлов txt с помощью механизма regex в Java; в то время как ничего не произошло со многими текстовыми файлами, с одной возникает следующее исключение:java.util.regex.PatternSyntaxException: Незаконное повторение

Exception in thread "main" java.util.regex.PatternSyntaxException: 
Illegal repetition near index 1 
b {en}http //fas org/sgp/crs/nuke/rs22542 pdf 

Совпадение картины получается зацикливание на множестве строк, вычисленных во время выполнения, и программа удаляет каждый подходящий шаблон из текста с replaceAll(), но не когда шаблон нестандартная строка b {en}http //fas org/sgp/crs/nuke/rs22542 pdf.

Что это значит? Как я могу исправить это или позволить компилятору игнорировать эту ошибку?

+1

Вы не показали нам свой код, так что трудно сказать, что конкретная проблема. –

+3

Примените 'Pattern.quote()' к части шаблона, которую вы хотите сопоставить буквально. –

+2

'{n}' используется в regex для представления повторения типа 'a {3}' будет соответствовать 'aaa'. regex, вероятно, пытается сообщить вам, что 'en' в' {en} 'неверно. Я не могу помочь вам с правильным решением, если я не знаю, чего вы пытаетесь выполнить и как выглядит ваш код. – Pshemo

ответ

3

replaceAll использует регулярное выражение синтаксиса и в регулярных выражениях {n} имеет особое значение, которое повторение как a{3} представляет aaa.

Если вы хотите просто заменить строковые литералы, используйте метод replace вместо replaceAll.
replace как в основном replaceAll, но без синтаксиса регулярных выражений (он автоматически добавляет механизмы регулярных выражений).

Вы можете найти больше информации в этом сообщении: https://stackoverflow.com/a/33444647/1393766

Смежные вопросы