gpt4 book ai didi

Java 正则表达式 : Look behind group does not have an "obvious maximum length"

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:06 24 4
gpt4 key购买 nike

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

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

但是,当我将其部署到tomcat 中进行远程测试时,出现以下异常:

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

下面是解析被调用值的函数:

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;
}

是什么导致它在应用程序中编译,但在网络应用程序中不起作用?

编辑:

这对任何字符串都失败了,但当前正在检查的字符串是:“(Group Camp Renovation)”

当从 main 调用时,该方法返回“Group Camp Renovation”,当通过 webapp 调用时,它会抛出异常。

最佳答案

问题是 - 再一次 - 在 Java 代码中引用字符串与通过某种输入读取时不引用字符串。

当您粘贴字符串 (?<=\\().+?(?=\\){1}) 时像这样:

String s1 = "(?<=\\().+?(?=\\){1})";
System.out.println(s1);

你会得到这个输出

(?<=\().+?(?=\){1})

这就是正则表达式解析器看到的内容。

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

String s1 = new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println(s1);

将打印

(?<=\\().+?(?=\\){1})

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

关于Java 正则表达式 : Look behind group does not have an "obvious maximum length",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16855294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com