寻求REGEX以选择封闭字符串来匹配组

我有一个字符串,其中包含多个“ new Array(...)”子字符串。每个数组都以“)”结尾,最后一个数组除外,它以“))”结尾。

示例Strong如下所示:

String text="root(new Array(\"Field1\", \"Field2\"), new Array(new Array(\"myArray1F1 (St.)\", \"myArray1F2\"),new Array(\"myArray2F1\", \"myArray2F2\"),new Array(\"myArray3F1\", \"myArray3F2\")) 0, 0)";

我尝试了自己制作或在互联网上找到的几种模式。但是没有任何效果。我从这种模式开始,但仍然想知道为什么这不起作用。

Pattern.compile("(new Array\\(\".*(\\),|\\)\\)))");

要么

Pattern.compile("(new Array\\(\"(?!\\),|\\)\\)).*)");

这几乎照原样返回了整个String。

    @Test
    public void testMyArray() {
        Pattern arrayPattern = Pattern.compile("(new Array\\(\".*(\\),|\\)\\)))");
        String text="root(new Array(\"Field1\", \"Field2\"), new Array(new Array(\"myArray1F1 (St.)\", \"myArray1F2\"),new Array(\"myArray2F1\", \"myArray2F2\"),new Array(\"myArray3F1\", \"myArray3F2\")) 0, 0)";
        Matcher matcher = arrayPattern.matcher(text);
        while  (matcher.find()) {
            System.out.println(matcher.group(1));
        }
    }
评论
  • 一筐猪
    一筐猪 回复

    您使用此模式

    (\")([a-zA-Z0-9]+)
    

    将选择

    Field1
    Field2
    myArray1F1
    myArray1F2
    myArray2F1
    myArray2F2
    myArray3F1
    myArray3F2
    
        @Test
        public void testMyArray() {
            Pattern arrayPattern = Pattern.compile("(\")([a-zA-Z0-9]+)");
            String text="root(new Array(\"Field1\", \"Field2\"), new Array(new Array(\"myArray1F1 (St.)\", \"myArray1F2\"),new Array(\"myArray2F1\", \"myArray2F2\"),new Array(\"myArray3F1\", \"myArray3F2\")) 0, 0)";
            Matcher matcher = arrayPattern.matcher(text);
            while  (matcher.find()) {
                System.out.println(matcher.group(2));
            }
        }
    
  • 红颜暗
    红颜暗 回复

    这些是我要检测的组:

    new Array("Field1", "Field2") 
    new Array("myArray1F1 (St.)", "myArray1F2") 
    new Array("myArray2F1", "myArray2F2") 
    new Array("myArray3F1", "myArray3F2")