Java正则表达式:Look-behind组没有一个";“明显最大长度”;

Java正则表达式:Look-behind组没有一个";“明显最大长度”;,java,regex,quoting,Java,Regex,Quoting,我有一个正在运行的服务,它使用发送给它的regex,并使用它从字符串中检索值 我可以在类内创建一个main方法,并调试我已将您的模式输入到的正则表达式(?),结果与Tomcat的结果相同: System.out.println("aoeu".matches("(?<=\\\\().+?(?=\\\\){1})")); System.out.println(“aoeu.matches”(?问题再次是Java代码中的字符串引用,而不是通过某种输入读取时的不引用 粘贴字符串(?Pattern.

我有一个正在运行的服务,它使用发送给它的regex,并使用它从字符串中检索值


我可以在类内创建一个main方法,并调试我已将您的模式输入到的正则表达式(?),结果与Tomcat的结果相同:

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

System.out.println(“aoeu.matches”(?问题再次是Java代码中的字符串引用,而不是通过某种输入读取时的不引用


粘贴字符串
(?
Pattern.compile()
在从主方法运行时与同一个正则表达式完美配合。我知道这是一个运行时异常,我想知道为什么只有在某些情况下才会抛出它。我希望您没有使用
{1}
,并且这只是您真正拥有的Pattern.compile()的一个坏例子除非我添加了{1}@MarkoTopolnik,并添加了调用它的字符串,否则将无法工作。上面是传递的确切字符串。+1漂亮的答案:)我对这个问题有一个盲点,在我的示例中自动将反斜杠加倍,而没有仔细考虑这可能会让OP感到不安。我自己也明白了,收到了您的答案。谢谢。)
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;
}
System.out.println("aoeu".matches("(?<=\\\\().+?(?=\\\\){1})"));
String s1 = "(?<=\\().+?(?=\\){1})";
System.out.println(s1);
(?<=\().+?(?=\){1})
String s1 = new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println(s1);
(?<=\\().+?(?=\\){1})