Java RegExp ViewState - PullRequest
       12

Java RegExp ViewState

1 голос
/ 23 апреля 2010

Я портирую некоторые функции из приложения C ++ на Java.Это включает чтение неизменяемых файлов данных, содержащих регулярные выражения.

Многие файлы данных содержат регулярные выражения, которые выглядят примерно так:

(?<=id="VIEWSTATE".*?value=").*?(?=")

Эти регулярные выражения даютошибка:

"Look-behind group does not have an obvious maximum length near index XX"

В C ++ используемый движок поддерживал эти выражения.Есть ли другая форма регулярного выражения, которая может дать тот же результат, который может быть сгенерирован с использованием выражений, таких как мой пример, в качестве ввода?

Ответы [ 2 ]

2 голосов
/ 23 апреля 2010

Насколько я знаю, только .NET и JGSoft, среди всех текущих разновидностей регулярных выражений, поддерживают неограниченные квантификаторы в выражениях просмотра назад. Если вы не можете изменить регулярное выражение, вы не можете делать то, что вы хотите в Java.

Но оглядываться назад - это неправильный способ выполнить эту работу. Было бы намного проще и эффективнее использовать группу захвата:

id="VIEWSTATE".*?value="([^"]*)"

... затем вы получаете значение из группы # 1. Вы уверены вы не можете изменить регулярные выражения?

1 голос
/ 23 апреля 2010

Единственный обходной путь выглядит следующим образом: замените звезду на {0,ALMOST_INTEGER_MAX_VALUE}, где верхний предел может быть большим, но должен быть достаточно маленьким, чтобы максимальная длина всей группы просмотра за спиной не превышала Integer.MAX_VALUE.

См. Также Регулярное выражение без явной максимальной длины в Java

...