2010-04-23 61 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