正则表达式中的点行为

时间:2011-09-21 05:09:17

标签: java regex

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

当我使用上面的代码时,它没问题。但是当我使用这个regexpr [.]*时,我不明白发生了什么。它会打印false

如何将点作为特定符号?或者如何使用没有\ n和\ r?

的任何字符创建一类符号

4 个答案:

答案 0 :(得分:7)

  

但是当我使用这个regexpr [。] *时,我不明白发生了什么。它说我是假的。

因为在character class内,点失去了它的特殊含义,并且会匹配一个普通的旧点(.字符)。

在字符类之外,点是与任何字符匹配的元字符,不包括换行符(当然,除非使用Pattern.DOTALL修饰符)。

  

或者如何使用没有\ n和\ r。

的任何字符制作一类符号

使用否定的字符类:

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

[^\r\n]表示“匹配任何 \r\n的内容。

答案 1 :(得分:3)

.*表示任何字符为0次或更多次 [.]*表示点字符数为0或更多次

答案 2 :(得分:2)

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

答案 3 :(得分:0)

.predefined character class。它匹配任何字符(可能匹配或不匹配行终止符)。如果要定义包含range值的字符类,可以使用[]