如何在括号内的括号中获取带有Java正则表达式的字符串

如何在括号内的括号中获取带有Java正则表达式的字符串,java,regex,Java,Regex,如何在括号内获得字符串。请参阅下面的代码 String str = "C1<C2, C3<T1>>.C4<T2>.C5" 但结果是 C1<C2, C3<T1> C1我发现您的代码有两个问题: 看起来您只是打印了第一个匹配项,而不是 循环浏览结果。使用while(mat.find())进行迭代 通过匹配列表 将模式简化为\\w+(]++>+)?以获得C1、C4和C5 正则表达式模式解释: w+=1个或多个字母数字或下划线字符 ()?=括号

如何在括号内获得字符串。请参阅下面的代码

String str = "C1<C2, C3<T1>>.C4<T2>.C5"
但结果是

C1<C2, C3<T1>

C1我发现您的代码有两个问题:

  • 看起来您只是打印了第一个匹配项,而不是 循环浏览结果。使用
    while(mat.find())
    进行迭代 通过匹配列表
  • 将模式简化为
    \\w+(]++>+)?
    以获得
    C1
    C4
    C5

    正则表达式模式解释:

    • w+
      =1个或多个字母数字或下划线字符
    • ()?
      =括号中的0或1
    • 字符
    • +
      =1个或多个
      字符(如果您只想强制执行一个或两个
      字符,则另一种选择是
      {1,2}
  • 生成的代码应如下所示:

    public static void main(String[] args)
    {
        String str = "C1<C2, C3<T1>>.C4<T2>.C5";
        Pattern pat = Pattern.compile("\\w+(<[^>]+>+)?");
        Matcher mat = pat.matcher(str);
    
        while(mat.find()) {
            System.out.println(mat.group());
        }    
    }
    
    String[] parts = str.split("\\.");
    
    只是在点上分开:

    String[] parts = str.split("\\.");
    

    使用问题中的示例输入,这就是您想要的。

    我认为如果您将嵌套括号的数量限制在某个固定的数量,例如四个嵌套级别,这是可能的。通常会使用解析器来实现这一点。在我看来,您只是想在
    上进行拆分。我错过了什么吗?@markspace是对的。如果你不限制可能的括号嵌套,这就不能用正则表达式来表达。哈哈,我完全同意@shmosel,围绕句点进行拆分,你很乐意这样做go@shmosel实际上,我首先在“.”上拆分了str,然后我想如何在它上拆分正则表达式。谢谢大家!!!我想你的意思是
    str.split(\\)@ScaryWombat我想我也是这个意思:)谢谢。更新了我的答案。@TotZam非常感谢!!我喜欢这个。我不能使用split,因为这个cas是“C1.C4.C5”,所以我最后使用了
    Stack
    。如果你不介意的话,我可以问个问题吗?什么是(+?)?(.+)与(.+?)有什么不同?@KimKevin尝试在上测试您的表达式。该站点允许您将鼠标悬停在表达式的每个部分上,它非常好地解释了它的含义。简而言之,
    (.+)
    匹配任何字符1次或多次。使用
    (.+?)?
    ,第一个
    使前面的量词变懒,使其匹配尽可能少的字符,第二个
    匹配括号中的整个表达式0或1次。这实际上是一个单独的问题,因此如果您想要更详细的解释或有其他问题,请提出一个单独的新问题,我可以尝试帮助您。@Kimkvin您也可以查看不同正则表达式符号的更多解释,特别是关于的部分。
    String[] parts = str.split("\\.");