当我将String::matches
放入String时,为什么\n
方法返回false?
public class AppMain2 {
public static void main(String[] args) {
String data1 = "\n London";
System.out.println(data1.matches(".*London.*"));
}
}
答案 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);