'\'是转义字符,修饰紧跟在它后面的一个字符。比如'd',前面加上'\'之后就表示它匹配所有的数字而不是字符'd'。
由于正则表达式中可以出现圆括号'('和')',当要匹配目标字符串里的圆括号时,需要在圆括号前加转义字符'\'。这个表达式要匹配的字符串应该是允许在前三个数字两边选择加圆括号或不加圆括号。但是这个写法有点问题,当在是前三个数字两边只加一个圆括号的时候,它也能匹配- -!
建议lz改为^(\(\d{3}\)|\d{3})[-| ]?(\d{8})$

解决方案 »

  1.   

    这个式子可行吗??
    "\"用于引用转义构造,后面要加特定字符才可行,你到JDK的Pattern类看看,那里有正则表达式的构造摘要
      

  2.   


    我是说楼主的式子,我在java中试了,编译时非法转义了。。
      

  3.   


    我狂晕。java里的字符串不等于正则表达式,对于正则表达式里的每一个'\',在Java的字符串里需要在其前面再加一个'\',这样才能编译。
    如果打算在Java里使用正则表达式^(\(\d{3}\)|\d{3})[-| ]?(\d{8})$的话,需要写成"^(\\(\\d{3}\\)|\\d{3})[-| ]?(\\d{8})$"。