Сбой Java Regex Engine - PullRequest
       1

Сбой Java Regex Engine

1 голос
/ 02 декабря 2010

Шаблон регулярного выражения - ([^=](\\s*[\\w-.]*)*$)

Тестовая строка - paginationInput.entriesPerPage=5

Движок Java Regex C давным-давно (> 2 минуты) при поиске соответствия.Это не относится к следующим тестовым входам:

paginationInput=5

paginationInput.entries=5

Мое требование - взять строку в правой части из = и заменить ее чем-нибудь,Приведенный выше шаблон работает нормально, за исключением ввода, упомянутого выше.

Я хочу понять, почему произошла ошибка и как я могу оптимизировать Regex для моего требования, чтобы избежать других особых случаев.

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вы можете использовать взгляд назад, чтобы убедиться, что ваша строка начинается с символа после =:

(?<=\\=)([\\s\\w\\-.]*)$

Что касается того, почему он падает, это второй * вокруг группы. Я не уверен, зачем вам это нужно, так как это звучит так, как будто вы просите:

  • Один символ, все, кроме равных
  • Затем 0 или более повторов из следующей группы:
    • Любое количество пробелов
    • Тогда любое количество символов слова, тире или точка
  • Конец строки

В любом случае, возьмите это *, и оно больше не будет вращаться вечно, но я бы все же выбрал более конкретное регулярное выражение, используя взгляд позади.

Кроме того, я не знаю, как вы используете это, но почему у вас там был $? Тогда вы можете соответствовать только последнему в строке (если у вас их больше одного). Похоже, вам лучше заглянуть в новую линию или в конце: (?=\\n|$)

[ Редактировать ]: обновление для каждого комментария ниже.

0 голосов
/ 02 декабря 2010

Попробуйте это:

=\\s*(.*)$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...