2010-04-23 60 views
1

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

很多数据文件包含类似于下面的正则表达式:

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

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

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

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

回答

2

据我所知,只有.NET和JGSoft,目前所有的正则表达式的口味中,支持无限量词回顾后表达式。如果你不能改变正则表达式,你不能在Java中做你想做的。

但是,向后看是摆在首位的错误方式。这本来是容易得多,也更高效,使用捕获组:

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

...那么你检索组#1的值。你是肯定你不能改变正则表达式?

+0

我真的很感谢回应,并且我完全理解了背后的原因,但不幸的是我无法更改正则表达式值。他们从一个我无法控制的过程以及来自多个第三方来源(许多实现它们的过程源)向外部提供应用程序 – CDSO1 2010-04-23 17:18:55

+0

我通过将传入的正则表达式转换为使用另一个正则表达式指定的格式来实现它,匹配原件(如果这是有道理的)。谢谢 – CDSO1 2010-04-23 19:41:06

+0

这听起来很有趣! ;) 很高兴我能帮上忙。 – 2010-04-23 20:37:39