请教一下高手,正则表达式中的“.”不是说代表任何符号吗?怎么在邮箱的验证中,不能代表“@”符号?

解决方案 »

  1.   

    代码如下,结果打印出“false”:
    public class TestRegExpre { public static void main(String[] args) {
    Pattern par = Pattern.compile("[\\w-.]+");
    Matcher m = par.matcher("[email protected]");
    print(m.matches()); } public static void print(Object o) {
    System.out.println(o);
    }}
      

  2.   

    首先,“.”可以匹配除了换行符“\n”以外的任意字符再说说这个正则,[\\w-.]+
    当正则中具有特殊意义的元字符放在字符组[]中时,只有有限的字符还是元字符,其它的都被转义了
    1、“^”出现在开始位置
    2、“-”前后构成范围区间
    3、“\”一直是转义符,“[”和“]”在大多数语言中需要转义
    其它元字符在字符组[]通常都只匹配字符本身,也就是[.]就只匹配小数点而已还有就是,如果按楼主的理解,小数点可以匹配任意字符,那么自然也就包含了“\w”和“-”,那楼主又为什么要多此一举,把它们和“.”放在一起取“或”呢
      

  3.   


    .只是不能匹配换行符“\n”,可以匹配除“\n”以外的任意字符,回车符“\r”是可以匹配的
    当然这是指使用传统的NFA引擎的语言,如Java和javascript等而言,在有的引擎中,“.”是可以匹配包括“\n”在内的任意字符的
      

  4.   

    老大js的.好像不能匹配\r \n的把
    alert(/./.test('\r')) //false
    alert(/./.test('\n')) //false
      

  5.   


    <script type="text/javascript">
        document.write("abc\r\n".match(/.+/g)[0] + "<br />");
        document.write("abc\r\n".match(/.+/g)[0].length + "<br />");
        document.write(/./.test("\r") + "<br />");
        document.write(/./.test("\n") + "<br />");
    </script>
    //输出
    abc 
    4
    true
    false
      

  6.   

    firefox、safari、opera、chrome是以下结果
    alert(/./.test('\r')) //false 
    alert(/./.test('\n')) //falseie下的结果
    alert(/./.test('\r')) //true
    alert(/./.test('\n')) //false
      

  7.   

    嗯,看来javascript还是接触的少,开始根据测试数据觉得javascript采用的是传统NFA引擎,却忽略了各浏览器之间的差异大概测了一下,Trident、Presto和Gecko应该都是采用的传统NFA引擎,而webkit至少是支持NFA引擎的,但是又NFA引擎表现的不太一样,估计不是做了高级优化的NFA引擎,就是DFA/NFA混合引擎但是对于同是采用传统NFA引擎的几款浏览器,居然对“.”的解析也不一样,汗一个
      

  8.   

    呵,无语了昨天验证了几款浏览器,刚刚又在下载Eclipse来验证