Произошла ошибка StackOverflowError как использование java.util.regex.Matcher - PullRequest
2 голосов
/ 03 марта 2010

Я пытаюсь поймать текст по регулярному выражению. Я перечисляю коды следующим образом.

Pattern p=Pattern.compile("<@a>(?:.|\\s)+?</@a>"); 
Matcher m = p.matcher(fileContents.toString());
while(m.find()) {
    //Error will be thrown at this point
    System.out.println(m.group());
}

Если длина текста, который я хочу перехватить, слишком велика, система выдаст мне StackOverflowError. В противном случае коды работают хорошо. Пожалуйста, помогите мне, как решить эту проблему.

Ответы [ 2 ]

3 голосов
/ 03 марта 2010

Точка и \s оба соответствуют пробельным символам. Это может привести к ненужному возврату. Что сделать вы хотите сопоставить? Возможно, какой-нибудь символ, включая разрывы строк?

Тогда просто используйте ленивую точку с включенной опцией dot-match-newlines:

Pattern p=Pattern.compile("<@a>.+?</@a>", Pattern.DOTALL);

Вы знаете, что у вас возникнут проблемы, если в ваши входные данные могут быть вложены теги <@a>?

0 голосов
/ 22 мая 2013
I always try to search text with case insensitive..
Pattern p=Pattern.compile("<@a>.+?</@a>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...