正则表达式模式中的点号行为

3
Pattern p2 = Pattern.compile(".*");
Matcher m2 = p2.matcher("true");
System.out.println(m2.matches() + " [" + m2.group() + "]");

当我使用上面的代码时一切正常。但是当我使用这个正则表达式[.]*时,我不明白发生了什么。它会打印出false
如何将点作为特定符号?或者如何创建一个包含任意字符(除了\n和\r)的符号类?
4个回答

7

但是我不明白当我使用这个正则表达式[.]*时发生了什么。它告诉我假。

因为在字符类中,点失去了其特殊含义,将匹配普通的点(即 . 字符)。

在字符类之外,点是一个元字符,匹配除换行符以外的任意字符(当然,如果你使用 Pattern.DOTALL 修饰符,则会匹配包括换行符在内的任何字符)。

或者如何创建一个包含任何字符但不包括 \n 和 \r 的符号类。

使用否定字符类:

 Pattern p2 = Pattern.compile("[^\\r\n]*");

[^\r\n] 的意思是“匹配任何不是 \r\n 的字符。”


[^\\r\n] 中,插入符号后面的第一个反斜杠是做什么用的? - Geek

3

.* 意味着匹配任意字符 0 或多次

[.]* 意味着匹配点(.)字符 0 或多次


2

[]是字符类,其中大多数表示它们实际的符号。在这种情况下,点只是一个点,而不是正则表达式中具有特殊含义的点。


如何将其制作为特定符号。 - itun
如何创建一个可以包含任何字符的类? - itun

0

点号 . 是一个预定义字符类。它匹配任何字符(可能匹配或不匹配行终止符)。如果想要定义包括范围值的字符类,可以使用[]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接