Java RegEx和换行符 - 错误或预期的行为?

时间:2011-04-03 10:21:34

标签: java regex

我正在尝试使用RegEx解释多行字符串,并且发现如果字符串包含换行符,匹配将失败。我没有使用MULTILINE模式,因为我没有使用锚点。根据API文档:

  

在多线模式下,表达式^   和$匹配之后或之前,   分别是行终止符或   输入序列的结尾。默认情况下   这些表达式只匹配   整个的开始和结束   输入序列。

简而言之:它清楚地表明这个标志只会改变锚点的工作方式,并且不会像那样说“当你的字符串包含换行符时,你一定要使用它”

public static void main(String[] args) {
    Pattern p = Pattern.compile(".*");

    Matcher m1 = p.matcher("Hello");
    System.out.println("m1: " + m1.matches());    // true

    Matcher m2 = p.matcher("Hello\r\n");
    System.out.println("m2: " + m2.matches());    // false
}

这真的是一个错误,或者我只是错过了一些文档?或者JAVA使用RegEx的方言,我的模式失败了吗?我正在使用jdk1.6.0_21

1 个答案:

答案 0 :(得分:3)

来自Pattern docs

  

正则表达式.匹配任何   除了行终止符之外的字符   除非指定了DOTALL标志。

如果您希望DOTALL为真,则需要指定m2.matches()标记。