0

第一步一切正常,但在第二步出现问题:它非常慢(20+秒)find()。除了 matches() 总是返回false,我不知道为什么。每个正则表达式分别工作正常。使用模拟器。萨克斯伙计们。

    String[] regexContent = {"node[\\s\\S]*?(<p>[\\s\\S]+</p>)", 
"([\\s\\S]*?)</div>"};

    Pattern p;
    Matcher m;


        for (String regex : regexContent){ 

            p = Pattern.compile(regex);
            m = p.matcher(result);

            //if (m.matches()) // always false
            result = "";
            if (m.find()) // on 2nd step waits for so long time & don't find
                result = m.group(m.groupCount());
            m.reset();

        }
4

1 回答 1

0

如果您确实需要重用从 Matcher.group 派生的字符串,最好创建一个新字符串,因为您从 Matcher.group 获得的实际上仍然是一个子字符串,其引用指向原始字符串。因此,当您第二次阅读参考并传递给 Pattern.matcher() 时,您实际上并没有传递从第一步获得的确切字符串。也许这是一个错误,或者它被设计为以这种方式工作。但是对于您的情况,每次为 Matcher.group() 创建一个新字符串总是让生活更轻松。希望我正确和完整地解释了它。

String[] regexContent = {"node[\\s\\S]*?(<p>[\\s\\S]+</p>)", 
"([\\s\\S]*?)</div>"};

Pattern p;
Matcher m;


    for (String regex : regexContent){ 

        p = Pattern.compile(regex);
        m = p.matcher(result);

        //if (m.matches()) // always false
        result = "";
        if (m.find()) // on 2nd step waits for so long time & don't find
            result = new String(m.group(m.groupCount()));
        m.reset();

    }
于 2013-09-04T04:55:59.983 回答