正则表达式
1.概念
正则表达式,又称规则表达式。(英语:Regular Expression,常简写为regex)。正则表达式通常被 用来检索、替换那些符合某个模式(规则)的文本。支持正则表达式的有:PHP、Java、Python、 JavaScript等。有了正则表达式写代码更加简洁,通常两三行代码就可以达到目的。
2.规则
- 任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
String email="@";
System.out.println(email.matches("@"));
- []代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
String s="a";
System.out.println(s.matches("[xay]"));
- -在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;
String s = "-o";
System.out.println(s.matches("-[n-q]"));
System.out.println(s.matches("[-a-z]"));
System.out.println(s.matches("[-o]"));
- 在中括号里面和外面含义不同,如在外时,就表示开头,如7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
//特殊字符匹配^[]前表示开头$表示结尾
String s="z^a";
System.out.println(s.matches("^z[^abc][abc]$"));
- .表示匹配任意的字符。
//.匹配任意字符\\.或[.]就表示.本身
String s="^&你好.";
System.out.println(s.matches("....."));
System.out.println(s.matches("....[.]"));
System.out.println(s.matches("...[.][.]"));
System.out.println(s.matches("....\\."));
- \d表示数字。
//匹配数字
String s= "124";
System.out.println(s.matches("\\d\\d\\d"));
System.out.println(s.matches("[0-9][0-9][0-9]"));
- \w表示字母、数字、下划线,[a-zA-Z0-9_]。
//匹配变量名(单纯符号)\\w 字母, 数字,下划线
String s ="d_9";
System.out.println(s.matches("\\w\\w\\w"));
System.out.println(s.matches("[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]"));
- [\u4e00-\u9fa5]匹配汉字
//匹配汉字
String s="姓名:tom";
System.out.println(s.matches("[\\u4e00-\\u9fa5][\\u4e00-\\u9fa5]:[a-z][a-z][a-z]"));
System.out.println(s.matches("姓名:[a-z][a-z][a-z]"));
- ?: 表示出现0次或1次,+表示出现1次或多次, *表示出现0次、1次或多次, {n}表示出现n次,{n,m}表示出现n~m次,{n,}表示出现n次或n次以上。
//量词 符号
String s="姓名:tom666";
System.out.println(s.matches("[\\u4e00-\\u9fa5]{2}:\\w{6}"));
System.out.println(s.matches("[\\u4e00-\\u9fa5]{1,3}:\\w{6}"));
System.out.println(s.matches("[\\u4e00-\\u9fa5]{1,}:\\w{6}"));
System.out.println(s.matches("[\\u4e00-\\u9fa5]{2,2}:\\w{6}"));
System.out.println(s.matches("[\\u4e00-\\u9fa5]+:\\w{6}"));//+ 表示1次及1次以上
System.out.println(s.matches("[\\u4e00-\\u9fa5]*:\\w{6}"));//* 任意次数
System.out.println(s.matches("[\\u4e00-\\u9fa5]?:\\w{6}"));//? 0或者1次
正则表达式中的断言(assertions)
1、什么是断言?
广义上理解,断言(assertions),从字面上理解就是,判定是,还是否。在正则表达式的系统里,也就是匹配或者不匹配。随便写一个正则表达式,都能产生匹配或者不匹配的结果,所以,可以这样说,所有的正则表达式都可以叫断言。
有时候,我们也经常会看到看到这个概念,零宽断言(zero-width assertions)。普通的断言,比如\d+(匹配一个或者多个数字),它所匹配的内容是由长度的;而有些断言比如^和$(分别匹配行开头和结尾)匹配的仅仅是一个位置,这样可以理解为它所匹配的内容长度为0。所以,称这类断言为零宽断言(zero-width assertions)。
案例
某网站要求注册的账号只能是:字母和数字,不能都是字母,不能都是数字,且要求字母开头,长度在6-12之间,
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串");
String s = sc.nextLine();
System.out.println(s.matches("^[a-zA-Z](?![a-zA-Z]{6,12}$)(?![0-9]{6,12}$)[a-zA-Z0-9]{6,12}"));