Matcher在第二个循环中找不到

时间:2013-09-04 00:50:47

标签: java android regex

第1步是好的,但是第2步出错了:find()上的速度很慢(20秒以上)。除了匹配()总是回复false,我不知道为什么。另外每个正则表达式都可以。使用模拟器。 Thax家伙。

    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();

        }

1 个答案:

答案 0 :(得分:0)

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

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();

    }