我有一个运行的服务,它使用发送给它的正则表达式并使用它从字符串中检索一个值.
我可以在类中创建一个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调用时,它会抛出异常.
问题是 - 再一次 - 引用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}归因于(?=\\)部分而不是(?<=部分.
| 归档时间: |
|
| 查看次数: |
1989 次 |
| 最近记录: |