下面是我的代码import java.util.regex.Pattern;
import java.util.*;
public class Regular_expression 
{
       public static void main(String[] args)
       {
               Pattern pattern=Pattern.compile("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$");
               Scanner input1=new Scanner(System.in);
               System.out.println("请输入要匹配的邮箱:");
               String patternString=input1.nextLine();
               boolean result=pattern.matcher(patternString).matches();
               if(result)
                  System.out.println("匹配成功!");
               else                  System.out.println("匹配失败!");
       }    
      
}
编译时报错如下
Regular_expression.java:7: 非法转义字符
               Pattern pattern=Pattern.compile("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$");
                                                              ^
Regular_expression.java:7: 非法转义字符
               Pattern pattern=Pattern.compile("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$");
匹配点号不是加\就行了吗,怎么错了?

解决方案 »

  1.   

    Pattern pattern=Pattern.compile("^[_a-z0-9-]+(\\.[_a-z0-9-]+)*@[a-z0-9-]+(\\.[a-z0-9-]+)*$");
      

  2.   

    一个\是正则的转义,
    但是如果要在一个java String表示一个\,你在录入代码的时候,需要\\所以,推理可以得知正则中表达一个\字符,在java String中是String regex = "\\\\"
    其中,第一第三个是java字符串的转义,后面均更随\,表示两个java String的\,其中第一个代表正则的转义符