java代码
         "\n,".matches(".*[;,\\\\*]+.*");
字符串"\n,"应该被匹配么?我自己的理解生成的正则表达式是 .*[;,\\*]+.*
.* 表示匹配除了'\n'之外的字符0到n次
[;,\\*]+ 表示';' '\' ',' '*'中任意一个匹配1到n次因此,这个正则的意思也就是至少出现';' '\' ',' '*'其中一个,这4个字符的前后可以是
除了'\n'之外的任意字符那么既然字符串"\n,"中有'\n'了,就应该不被匹配了
但是实际运行的结果还是被匹配了,这是为什么?

解决方案 »

  1.   

    标点 . 可以匹配任何字符,包括空格、Tab字符甚至换行符。
      

  2.   

    首先,
    在regular expression中在[]中的metacharacter(除了~,(注)java中的String对\也比较特殊,所以需要\\表示\)可以不需要转义,所以[;,\\\\*]如果你想要表示的时候;,\*中的一个的话可以直接写成[;,\*]
    其次,
    "\n"在java中表示的是换行,换言之"\n,"表示的是一个换行+",",而不是你说的"\n"字符,和"\n"吻合的是
    [\t\s]*(java中需要写成[\\s\\t]*),所以要匹配的话应该是
    public class Test{
    public static void main(String[] args){
    String reg = "[\\s\\t]*[,;\\*]";
    System.out.println("\n*".matches(reg));
    }
    }
      

  3.   

    那么我应该怎么做一个字符串,让它里面含有'\n'字符,从而不能匹配.*[;,\\*]+.* 这个正则?
    这话如何理解啊?String regex = ".*[;,\\*]+.* ";表示的任意字符 + [;,\*]中的一个或多个 + 任意字符,所以你如果想要不匹配的话最简单的就是里面不要出现
    [;,\*],这样就不匹配啦