String.matches()with \ n

时间:2017-11-06 09:37:21

标签: java

当我将String::matches放入String时,为什么\n方法返回false?

public class AppMain2 {

    public static void main(String[] args) {

        String data1 = "\n  London";

        System.out.println(data1.matches(".*London.*"));
    }

}

4 个答案:

答案 0 :(得分:2)

如果您需要true,则需要使用Pattern.DOTALL(?s)

通过这种方式.匹配\n

中包含的任何字符
String data1 = "\n  London";
Pattern pattern = Pattern.compile(".*London.*", Pattern.DOTALL);
System.out.println(data1.matches(pattern));

或:

System.out.println(data1.matches("(?s).*London.*"));

答案 1 :(得分:2)

它不匹配因为"。"在正则表达式中可能不匹配行终止符,如此处的文档:

https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#sum

答案 2 :(得分:2)

默认情况下,Java的.与换行符不匹配。要让.包含换行符,请将Pattern.DOTALL标记设为(?s)

System.out.println(data1.matches("(?s).*London.*"));

请注意,对于来自其他正则表达式的那些,Java文档使用术语“匹配”与其他语言不同。是什么意思是Java string::matches()仅在整个字符串匹配时才返回true,即它的行为就好像^$被添加到头部并且传递的正则表达式的尾部,不仅仅是它包含匹配。

答案 3 :(得分:-1)

“\ n”视为换行符,因此 String.matches 在新行中搜索模式。返回false尝试类似这样的内容。

  

Pattern.compile(“。 London。”,Pattern.MULTILINE);