Java Regex:看后面的组没有"明显的最大长度"

4 java regex quoting

我有一个运行的服务,它使用发送给它的正则表达式并使用它从字符串中检索一个值.

我可以在类中创建一个main方法并调试正则表达式(?<=\\().+?(?=\\){1}),它可以很好地工作.

但是,只要我在tomcat中部署它以远程测试,我就会得到以下异常:

Look-behind group does not have an obvious maximum length near index 19
(?<=\\().+?(?=\\){1})
                   ^
Run Code Online (Sandbox Code Playgroud)

这是解析被调用的值的函数:

private String parsePattern(String value, String pattern)
{
    String ret = "";

    Matcher m = Pattern.compile(pattern).matcher(value);
    while (m.find())
    {
        ret = m.group(0);
    }

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

是什么导致它在应用程序中编译,但不能在webapp中工作?

编辑:

这与任何字符串失败,但当前正在检查的字符串是:"(Group Camp Renovation)"

当调用from时main,该方法返回"Group Camp Renovation",当通过webapp调用时,它会抛出异常.

A.H*_*.H. 6

问题是 - 再一次 - 引用Java代码中的字符串与通过某种输入读取时没有引用.

粘贴字符串时,(?<=\\().+?(?=\\){1})如下所示:

String s1 = "(?<=\\().+?(?=\\){1})";
System.out.println(s1);
Run Code Online (Sandbox Code Playgroud)

你会得到这个输出

(?<=\().+?(?=\){1})
Run Code Online (Sandbox Code Playgroud)

这就是正则表达式解析器所看到的.

但是当通过一个InputStream(仅作为示例)读取相同的字符串时,没有任何改变:

String s1 = new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println(s1);
Run Code Online (Sandbox Code Playgroud)

将打印

(?<=\\().+?(?=\\){1})
Run Code Online (Sandbox Code Playgroud)

这意味着,这{1}归因于(?=\\)部分而不是(?<=部分.