Java Matcher.matches()挂起

Java Matcher.matches()挂起,java,regex,Java,Regex,我正在尝试验证使用以下正则表达式接收的字符串(使用Pattern.quote转义字符) 你知道如何解决这个问题吗?首先,您不需要在Java正则表达式中转义,或。第二,如果您想要相同的模式4次,请使用{4}而不是重复该模式。因此,您的正则表达式可以简化为: (?:<ProfileInfo>.*?</ProfileInfo>){4} 当一个正在试图捕获4个连续元素的内容时,只需进行负面展望,就可以对其进行更多优化?为什么不使用XML解析器呢?请发布复制此错误的最小代码。如果

我正在尝试验证使用以下正则表达式接收的字符串(使用Pattern.quote转义字符)


你知道如何解决这个问题吗?首先,您不需要在Java正则表达式中转义
,或
。第二,如果您想要相同的模式4次,请使用
{4}
而不是重复该模式。因此,您的正则表达式可以简化为:

(?:<ProfileInfo>.*?</ProfileInfo>){4}

当一个
正在试图捕获4个连续
元素的内容时,只需进行负面展望,就可以对其进行更多优化?为什么不使用XML解析器呢?请发布复制此错误的最小代码。如果您无法描述在使用正则表达式之前您的程序是如何构造的
不是正则表达式的特殊字符,因此它们不需要转义(使用
\Q…。\E
部分)。类似地,
/
(至少在Java中-不要与JavaScript混淆)。是的,正确,我不能使用XML解析器。我收到的输入可能是XML/JSON等格式。可能是任何格式。感谢您的解决方案。但这个正则表达式是由用户给定的,我不能动态地转换输入以使用所有格匹配。我需要按原样使用用户提供的输入并捕获groups@Nagendra如果用户正在编写正则表达式,并且编写了一个糟糕的正则表达式,那么用户将不得不忍受他们编写的正则表达式的糟糕性能。另外,Pattern.compile也没有抛出任何异常,并且被认为是有效的,是否有其他方法可以用不同的正则表达式替换(.*)并捕获组?
"pinnedDispatcher-pinnedDispatcher-22" #82 prio=5 os_prio=0 tid=0x0000000020be1000 nid=0x2500 runnable [0x0000000029f59000]
   java.lang.Thread.State: RUNNABLE
    at java.util.regex.Pattern$GroupTail.match(Pattern.java:4717)
    at java.util.regex.Pattern$Curly.match1(Pattern.java:4287)
    at java.util.regex.Pattern$Curly.match(Pattern.java:4236)
    at java.util.regex.Pattern$GroupHead.match(Pattern.java:4658)
(?:<ProfileInfo>.*?</ProfileInfo>){4}
(?:<ProfileInfo>((?:(?!</ProfileInfo>).)*+)</ProfileInfo>){4}
(?:
  <ProfileInfo>                   match start tag
  (?:
    [^<]*+                          skip until '<' (fast)
    (?:                             match '<'
      <
      (?!/ProfileInfo>)               but not if beginning of end tag
    )?+
  )*+                             repeat if '<' was matched
  </ProfileInfo>                  match end tag
){4}                            repeat 4 times