java - 模式/匹配器不适用于换行符

标签 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;*>

最佳答案

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/

相关文章:

java - Tapestry 5 - 在 Java 代码中动态生成 W​​eb 应用程序上下文文件夹中文件的 URL

python - 正则表达式 Python 提取数

Python Pyparsing : Capture comma-separated list inside parentheses ignoring inner parentheses

javascript - 如何在 Atom 编辑器中搜索 <p> 元素内的双空格?

java - NIO:OP_READ并且未读取所有数据; OP_READ 是否仍处于就绪状态?

java - 如何更高效地编写递归左移数组算法

java - 在 Android 中迭代可绘制对象

java - Maven: 包 com.sun.istack.internal 不存在

Ruby regexp - 如何验证 8 位数字?

java - 如何获取特定字符串前的空格索引?