1

我正在将一些功能从 C++ 应用程序移植到 java。这涉及读取包含正则表达式的不可修改的数据文件。

许多数据文件包含类似于以下内容的正则表达式:

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

这些正则表达式会产生以下错误:

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

在 C++ 中,所使用的引擎支持这些表达式。是否有另一种形式的正则表达式可以产生相同的结果,可以使用像我的示例这样的表达式作为输入来生成?

4

2 回答 2

2

据我所知,在所有当前的正则表达式风格中,只有 .NET 和 JGSoft 支持后向表达式中的无界量词。如果你不能改变正则表达式,你就不能在 Java 中做你想做的事。

但从一开始,往后看就是做这项工作的错误方法。使用捕获组会更容易,也更有效:

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

...然后您从组 #1 中检索值。你确定你不能改变正则表达式吗?

于 2010-04-23T17:02:41.280 回答
1

唯一的解决方法似乎是:用 替换星{0,ALMOST_INTEGER_MAX_VALUE}号,其中上限可以很大,但必须足够小,以使整个后视组的最大长度不大于 Integer.MAX_VALUE。

另请参见Java 中没有明显最大长度的 Regex look-behind

于 2010-04-23T16:23:33.417 回答