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での明らかな最大長のない正規表現ルックビハインドも参照してください。

于 2010-04-23T16:23:33.417 に答える