我在 Java 中使用 Pattern 和 Matcher 编写了一个程序来在一组字符之间生成一个字符串。我的代码目前是:
String trying = "75px;";
Pattern tryingPattern = Pattern.compile("(?<="+Pattern.quote(trying)+").*?(?=center)", Pattern.MULTILINE);
Matcher tryingMatcher = tryingPattern.matcher(pageContentString);
while (tryingMatcher.find()) {
docketFile.write(tryingMatcher.group().toString());
}
我正在尝试获取“75px;”之间的信息和“中心”这个词。 问题是,任何时候出现一个序列,如下所示,其中包含多行信息,即使存在开始和结束字符串,它也无法识别模式。根据我的代码,我不确定为什么包括换行符在内的信息不允许识别模式。
下面的示例数据。
<td align=*left* valign=*top* style=*width:75px;*>03/04/2013</td><td align=*left* valign=*top*>D6</td><td align=*left* valign=*top*>SR</td><td align=*left*>SUMS AMENDED COMPLNT(20967973) SENT BY CERTIFIED MAIL.
TO:
CUYAHOGA CLERK OF COURTS
1200 ONTARIO CT
CLEVELAND, OH 44113-0000
</td><td align=*center*><a href=*DisplayImageList.aspx?q=03WzlSkU6oMVIiKW14aCZBTEV4FirUMU0*><img src=*images/ImageSheet.png* alt=** /></a></td>
</tr><tr style=*background-color:Gainsboro;*>
最佳答案
Pattern.MULTILINE
影响 ^
和 $
的行为(以匹配行的开头和结尾),您不需要'在您的模式中完全使用。
对于您的用例,请使用 DOTALL
,因为您希望在一行中处理所有内容。
这会起作用!
String trying = "75px;";
Pattern tryingPattern = Pattern.compile("(?<="+Pattern.quote(trying)+").*?(?=center)", Pattern.DOTALL);
Matcher matcher = tryingPattern.matcher(str);
// check all instances
while (matcher.find()) {
System.out.println(matcher.group());
}
关于java - 模式/匹配器不适用于换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21493982/