第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();
}
答案 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();
}