模式和匹配问题

时间:2014-01-27 21:06:50

标签: java regex matcher

我用Java编写代码,在两个字符序列之间返回一串信息。我的代码是:

String caseDefendant = "vs."; 
Pattern caseDefendantPattern = Pattern.compile("(?<="+Pattern.quote(caseDefendant)+").*?(?=</span>)");
Matcher caseDefendantMatcher = caseDefendantPattern.matcher(pageContentString); 

while (caseDefendantMatcher.find()) {
    docketFile.write(caseDefendantMatcher.group().toString()); 
}
docketFile.write("^");

我要做的是在vs.</span>之间返回信息。这个问题是在字符串&#34; pageContentString&#34;序列vs.INFORMATION</span>出现两次,所以当我把它写入文件时,它被写入两次而不是一次,当我只需要写一次信息时。例如,如果pageContentString是:

"vs.info1</span>   aaabbbccc vs.info1</span>" 

我的文件写为info1 info1。我如何更改我的代码,以便它不会写第二组信息?

1 个答案:

答案 0 :(得分:1)

你有一个循环:

while (caseDefendantMatcher.find()) {
    docketFile.write(caseDefendantMatcher.group().toString()); 
}

此循环将查找并打印所有匹配项。如果你只想要第一场比赛,那么不要循环:

String caseDefendant = "vs."; 
Pattern caseDefendantPattern = Pattern.compile("(?<="+Pattern.quote(caseDefendant)+").*?(?=</span>)");
Matcher caseDefendantMatcher = caseDefendantPattern.matcher(pageContentString); 

if (caseDefendantMatcher.find()) {
    docketFile.write(caseDefendantMatcher.group().toString()); 
}

docketFile.write("^");