正则表达式只能使用英文输入法
知识点:
(1)[ ] 方括号表达式,占一个位置
(2)元字符 占一个位置
1 . 任意字符
2 * 占0 -n位字符
3 ? 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是"非贪心的"。"非贪心的"模式匹配搜索到的、尽可能短的字符串,而默认的"贪心的"模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"。在matches()方法建议配合[ ]使用,此时?可以简单的理解为占用0-1个字符,
eg : "t[A-z]?m" 表示此字符串占2或者3个位置,如果是3个位置,第二位置的字符必须是字母!
4 + 占 1-n位字符
注意:以上除了(.)都不能单独使用,否则会报错
(3)量词 : 表示个数,通常与{} 一起使用
eg. "t.{2}m" 表示 此字符串共占4个字符,其中第二和第三字符为任意字符
(4) 字符组合代表的特殊含义
1. \\w 字母数字下划线 \\W 非字母数字下划线
( \\ 表示转义符号 )
2. [A-z] 所有字母
3. [0-9] (\d) 所有数字
4. [A-z0-9] 所有字母和数字
5. [\u4e00-\u9fa5]
以String类中的matches()方法的匹配为例子进行实例讲解:
API:
public boolean matches(String regex)regex
- 要匹配此字符串的正则表达式
package jd1908_corejava.ch10; //String类常用方法测试 //java常用正则表达式应用! //全是英文输入法 /** * 上接 ch9中 Test7 * 测试字符串中的方法<br> * */ public class Test1 { //建议? 配合[] 使用,此时?占0-1个字符 public static void main(String[] args) { String s1 = "tam"; //方括号表达式,占一个位置 //A-z 方法必须+[] [A-z] , 默认占用一个字符,与其他元字符组合可发生改变 //System.out.println(s1.matches("t[A-z]?m"));//true //System.out.println(s1.matches("t[A-z]?.m"));//true //不建议使用 //System.out.println(s1.matches("t?m")); //false //System.out.println(s1.matches("t[abc]m"));//ture //元字符,占一个字符 // \\w 字母数字下划线(一个字符) \\W 非字母数字下划线 // . 任意字符 // \\d 数字 String s2 = "t!m"; //System.out.println( s1.matches("t.m") );//true //System.out.println( s1.matches("t\\Wm") );//false String s3 = "tom" ; //{2} 表示字符串的总字符个数为(占的字符为)2 System.out.println( s1.matches("t.{2}m") );//flase //至少2位 //注意:"t.{2,}m" 占的字符位>=3位 System.out.println( s1.matches("t.{2,}m") );//true //6到8位 //只能是字母数字 6-8! System.out.println( s1.matches("[A-z0-9]{6,8}") ); //"hello";//false //"tom123";//true // "wangzhao";//true // "wangzhao1";//false // "wa总问子hao";//false // * 0 - n 位 //s1 = "";//true //s1 = "sjiofioso";//true //String s4 = null ; //java.lang.NullPointerException 空指针报错 //System.out.println( s4.matches("*") ); // + 1 - n s1 = "t"; System.out.println( s1.matches("t[A-z]+m") ); // * + ? 不能单独使用! //System.out.println( s1.matches("*") ); System.out.println( s1.matches(".") ); //约束电话号码: //1 10 s1 = "18501532234"; System.out.println(s1.matches("1[0-9]{10}")); //邮箱 //xiongzg@briup.com //字母数字@字母数字.com s1 = "xiongzg@briup.com"; System.out.println(s1.matches("[A-z0-9]+@[A-z0-9]+\\.com")); System.out.println(s1.matches("[A-z0-9]+@[A-z0-9]+[.]com")); } }