Pattern p2 = Pattern.compile(".*");
Matcher m2 = p2.matcher("true");
System.out.println(m2.matches() + " [" + m2.group() + "]");
当我使用上面的代码时一切正常。但是当我使用这个正则表达式
[.]*
时,我不明白发生了什么。它会打印出false
。如何将点作为特定符号?或者如何创建一个包含任意字符(除了\n和\r)的符号类?
但是我不明白当我使用这个正则表达式[.]*时发生了什么。它告诉我假。
因为在字符类中,点失去了其特殊含义,将匹配普通的点(即 .
字符)。
在字符类之外,点是一个元字符,匹配除换行符以外的任意字符(当然,如果你使用 Pattern.DOTALL
修饰符,则会匹配包括换行符在内的任何字符)。
或者如何创建一个包含任何字符但不包括 \n 和 \r 的符号类。
使用否定字符类:
Pattern p2 = Pattern.compile("[^\\r\n]*");
[^\r\n]
的意思是“匹配任何不是 \r
或 \n
的字符。”
.*
意味着匹配任意字符 0 或多次
[.]*
意味着匹配点(.)字符 0 或多次
[]
是字符类,其中大多数表示它们实际的符号。在这种情况下,点只是一个点,而不是正则表达式中具有特殊含义的点。
[^\\r\n]
中,插入符号后面的第一个反斜杠是做什么用的? - Geek