Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Regex根据具有嵌套尖括号的尖括号选择文本_Java_Regex - Fatal编程技术网

Java Regex根据具有嵌套尖括号的尖括号选择文本

Java Regex根据具有嵌套尖括号的尖括号选择文本,java,regex,Java,Regex,我想根据以下场景选择文本。我尝试了几个正则表达式,但仍然无法使用一个正则表达式覆盖所有场景 设置1 结果应为两组和 结果应为两组和 设置2 sampletext>结果应为两组sampletext和 foundnotfound>结果应为两组和notfound> notfound结果应为两组和notfound notFoundString notfound>结果应为两组和notfound> notFoundEmpty>结果应为两组和 设置3 结果应为两组和 >1000结果应为两组和1000 thre

我想根据以下场景选择文本。我尝试了几个正则表达式,但仍然无法使用一个正则表达式覆盖所有场景

设置1

结果应为两组

结果应为两组

设置2

sampletext>
结果应为两组sampletext

foundnotfound>
结果应为两组notfound>

notfound
结果应为两组notfound

notFoundString notfound>
结果应为两组notfound>

notFoundEmpty>
结果应为两组

设置3

结果应为两组

>1000
结果应为两组1000

thread.duration>1000>
结果应为两组thread.duration>1000>

设置4

12345678
结果应为两组12345678

add.sample.result
结果应为两组add.sample.result

我试过的正则表达式

  • ]*)>|(\S+
    这在集合1和集合4中效果很好,但在集合2和集合3中,它捕获的组多于所需的组

  • |(\S+)
    这对集合2和4很有效,但在集合1和集合3中给出错误的结果

  • 我需要正则表达式,它在所有集合中提供上述预期结果。

    您可以使用

    ((?:<[^<>]*(?:<[^<>]*(?:<[^<>]*>[^<>]*)*>[^<>]*)*>)+)|(\S+)
    
    ((?:)+)|(\S+)
    

    它要么匹配并捕获两组
    (?:)+
    \S+
    模式

    详细信息

    • (?:)+
      -匹配一个或多个连续出现的
    • |
      -或
    • \S+
      -1+非空白字符

    将适用于两层深的嵌套角括号。@WiktorStribiżew谢谢。这似乎是完美的工作。如果您能对该系统的工作进行评论,将非常有帮助。看起来有点复杂。或者它可以更简单一些?你是在问,对于一个人还是一台机器,它可以简化吗?我总是试图优化以获得最佳性能。@WiktorStribiżew为人类服务。或者,如果你能详细说明这项工作,让我理解。