模式/匹配器不使用换行符

时间:2014-02-01 04:11:13

标签: java regex

我在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;*>

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

尝试添加Pattern.DOTALL。

捕获该文本的另一个选择是使用捕获组:

75px(.*)center