正则表达式
1.基本操作
连接操作:
写出 A,表示匹配A,写出B,表示匹配AB;
public static void main(String[] args) { String s = "AB"; boolean isMatches = Pattern.matches("AB",s); System.out.println(isMatches); } 运行结果true
或操作:
写出 A|B ,会匹配 A或者B,写出 AB|BC|CD,会匹配AB,BC,或者CD
public static void main(String[] args) { String s = "CD"; boolean isMatches = Pattern.matches("AB|BC|CD",s); System.out.println(isMatches); } 运行结果:true
闭包操作
将*标注在要重复的模式之后,即可将模式部分重复任意的次数
public static void main(String[] args) { String s = "AAAAAAAAB"; boolean isMatches = Pattern.matches("A*B",s); System.out.println(isMatches); } 这个demo将A重复任意次,匹配前面有任意个A,以B结尾的字符串 运行结果:true
括号
使用括号可以改变默认的优先级顺序
public static void main(String[] args) { String s = "MAMAMAMAMAMAMAMAMAB"; boolean isMatches = Pattern.matches("(MA)*B",s); System.out.println(isMatches); } 匹配前面有任意个MA,最后以B结尾的字符串
demo练习:匹配ABMAMA和BAMAMA这俩个字符串
答案:
public static void main(String[] args) { String s = "BAMAMA";//ABMAMA boolean isMatches = Pattern.matches("(AB|BA)(MA)*",s); System.out.println(isMatches); } 运行结果true
2.字符集操作
这里先把操作列出来,然后再使用demo演示
- 使用.来匹配任意字符
- 使用[]来指定一个集合,比如 [AFGHS] 就是匹配集合中任意一个字符
- 使用包含在[]中的-来指定范围,如[A-Z]是匹配A-Z中任意一个字符
- 使用包含在[]中的^来取补集,如[ ^ABC]来除ABC外任意一个字符
demo
public static void main(String[] args) { //使用.来匹配任意的字符 String s1 = "ABC"; System.out.println( Pattern.matches("A.C",s1) ); //使用[]来表示集合 String s2 = "ABXZW"; System.out.println( Pattern.matches("[BAZWX]*",s2) ); //使用-来表示范围,如匹配大写小写数字这种模式 String s3 = "Bc5Hg1"; System.out.println( Pattern.matches("([A-Z][a-z][0-9])*",s3) ); //使用^来进行取反集合 String s4 = "ASD"; System.out.println( Pattern.matches("[^ASD]*",s4) ); }
3闭包的其他写法
前面的闭包运算符表示将它的操作数重复任意次,在实际使用中,我们希望能够灵活指定重复的次数
+运算符表示至少重复一次
?表示重复0次或一次
使用{}可以指定重复次数或范围
demo
public static void main(String[] args) { //+表示最少重复一次 String s1 = "AB";//空串情况为false System.out.println( Pattern.matches("(AB)+",s1) ); //使用?来表示重复0次或一次 String s2 = "ABAB";//AB 或者 空串时为true,ABAB为false System.out.println( Pattern.matches("(AB)?",s2) ); //使用{}来指定模式的次数 String s3 = "ABABAB"; System.out.println( Pattern.matches("(AB){3}",s3) ); //使用{}来指定重复次数的范围 // String s4 = "ABABAB"; // System.out.println( // Pattern.matches("(AB){1-5}",s4) // ); } 最后那个可能是字符串转义问题吧~-~