Регулярное выражение Java работает очень медленноJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Регулярное выражение Java работает очень медленно

Сообщение Anonymous »

Я пытаюсь использовать дерзкое регулярное выражение огня для соответствия URL -адресов в Java, и я нашел URL, который заставляет оценку навсегда. Я изменил оригинальную регуляцию для работы с синтаксисом Java. < /P>
private final static String pattern =
"\\b" +
"(" + // Capture 1: entire matched URL
"(?:" +
"[a-z][\\w-]+:" + // URL protocol and colon
"(?:" +
"/{1,3}" + // 1-3 slashes
"|" + // or
"[a-z0-9%]" + // Single letter or digit or '%'
// (Trying not to match e.g. "URI::Escape")
")" +
"|" + // or
"www\\d{0,3}[.]" + // "www.", "www1.", "www2." … "www999."
"|" + // or
"[a-z0-9.\\-]+[.][a-z]{2,4}/" + // looks like domain name followed by a slash
")" +
"(?:" + // One or more:
"[^\\s()]+" + // Run of non-space, non-()
"|" + // or
"\\((?:[^\\s()]+|(?:\\([^\\s()]+\\)))*\\)" + // balanced parens, up to 2 levels
")+" +
"(?:" + // End with:
"\\((?:[^\\s()]+|(?:\\([^\\s()]+\\)))*\\)" + // balanced parens, up to 2 levels
"|" + // or
"[^\\s`!\\-()\\[\\]{};:'\".,?«»“”‘’]" + // not a space or one of these punct chars (updated to add a 'dash'
")" +
")";

// @see http://daringfireball.net/2010/07/impro ... ching_urls
private static final Pattern DARING_FIREBALL_PATTERN = Pattern.compile(pattern, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
< /code>
Если я попытаюсь запустить следующее, это займет вечно. Я сузил его до сопоставления сбалансированных парен (я думаю). Если вы измените текст в паринах, он работает нормально, но примерно на 15 символов, он начинает замедлять экспоненциально. < /P>
final Matcher matcher = pattern.matcher("https://example.com/a(something_really_ ... ed_parens)");
boolean found = matcher.find();
< /code>
Есть ли способ улучшить эту регуляцию, чтобы строки о том, что они не принимают вечно? У меня есть около 100 различных URL -адресов в тестовом классе JUNIT, и мне нужно, чтобы они тоже продолжали работать.

Подробнее здесь: https://stackoverflow.com/questions/501 ... -very-slow
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»