代码之家  ›  专栏  ›  技术社区  ›  CDSO1

Java ReXEP视图状态

  •  1
  • CDSO1  · 技术社区  · 15 年前

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

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

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

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

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

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

    2 回复  |  直到 10 年前
        1
  •  2
  •   Alan Moore Chris Ballance    15 年前

    据我所知,在所有当前的regex风格中,只有.net和jgsoft支持lookback表达式中的无限量词。如果你不能改变正则表达式,你就不能在Java中做你想做的事情。

    但是,从一开始,落后是做这项工作的错误方式。使用捕获组会更容易,也更高效:

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

    …然后从组1中检索值。你是吗 当然 你不能改变正则表达式吗?

        2
  •  1
  •   Community CDub    8 年前

    唯一的解决办法似乎是:用 {0,ALMOST_INTEGER_MAX_VALUE} ,其中上限可以很大,但必须足够小,以便整个lookback组的最大长度不大于integer.max_值。

    也见 Regex look-behind without obvious maximum length in Java