java正则表达式
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果会更佳).
1.Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式。
2. Matcher类的构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例.
Pattern类只能做一些简单的匹配操作,要想得到更强更便捷的正则匹配操作,那就需要将Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持.
Java代码示例:
//编译正则表达式
Pattern p = Pattern.compile(“ab”);
//匹配一个字符串
Matcher m = p.matcher(“aa”);
//是否匹配
boolean b = m.matches();
System.out.println(b);//false
package com.feisi.test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) {
//一、字符类
//判断str1是否与正则表达式匹配
String str1 = "h";
//[abc]:其中任意一个字符,是否和str1匹配
boolean b1 = str1.matches("[abc]");
System.out.println(b1);//false
//[^abc]:除[]里面的所有符号,是否和str1匹配
boolean b2 = str1.matches("[^abc]");
System.out.println(b2);//true
//[a-z A-Z]:包括a-z或A-Z范围
boolean b3 = str1.matches("[a-z A-Z ]");
System.out.println(b3);//true
//[a-d[m-p]]:[a-d][m-p]的并集
boolean b4 = str1.matches("[a-d[m-p]]");
System.out.println(b4);//false
//[a-z&&[def]]:交集
boolean b5 = str1.matches("[a-z&&[def]]");
System.out.println(b5);//false
//[a-z&&[^bc]]:a-z,除了bc
boolean b6 = str1.matches("[a-z&&[^bc]]");
System.out.println(b6);//true
//[a-z&&[^m-p]]:a到z,而非m到p
boolean b7 = str1.matches("[a-z&&[^m-p]]");
System.out.println(b7);//true
//二、数量词
//X?:出现1次或者0次就会返回true
String str2 = "aaa";
boolean b21 = str2.matches("[a-c]?");
System.out.println(b21);//true
//x*:出现零次-多次就会返回true
boolean b22 = str2.matches("[abc]*");
System.out.println(b22);//true
// X+ :出现一次或多次
boolean b23 = str2.matches("[a-d]+");
System.out.println(b23);//true str2在[a-d]中出现了多次
// X{n}:出现恰好 n 次
boolean b24 = str2.matches("[a-d]{3}");
System.out.println(b24);//true str2在[a-d]中恰好出现了3次
// X{n,} :出现至少 n 次
boolean b25 = str2.matches("[a-d]{2,}");
System.out.println(b25);//true str2在[a-d]中出现了3次,满足至少出现了2次
// X{n,m}:出现至少 n 次,但是不超过 m 次
boolean b26 = str2.matches("[a-d]{3,5}");
System.out.println(b26);//true str2在[a-d]中出现了3次,满足至少出现了2次,但不超过5次
//出现多个字符的时候
String str22 = "ab";
boolean b27 = str22.matches("[a-z][a-z]");
System.out.println("==="+b27);//true
//三、预定义字符类
//1.\d:可以匹配0-9的数字,如果是多个数字,就要在后面加长度
String str31 = "123";
boolean b31 = str1.matches("\\d{3}");
System.out.println(b31);//true
//2.\D:匹配非数字: [^0-9]
String str32 = "hello";
boolean b32 = str2.matches("\\D{5}");
System.out.println(b32);//true
//3.\s :匹配空白字符:[ \t\n\x0B\f\r]
String str33 = " ";
boolean b33 = str3.matches("\\s");
System.out.println(b33);//true
//4.\S:匹配非空白字符:[^\s]
String str34 ="hello";
boolean b34 = str34.matches("\\S{5}");
System.out.println(b34);//true
//5.\w:匹配单词字符:[a-zA-Z_0-9]
String str35 ="hello";
boolean b35 = str35.matches("\\w{5}");
System.out.println(b35);//true
//6.\W:匹配非单词字符:[^\w]
String str36 ="123";
boolean b36 = str36.matches("\\W{3}");
System.out.println(b36);
//四、边界匹配器类
// 1.^:匹配行的开头
String str41 = "1";
boolean b41 = str41.matches("^[123]");
System.out.println(b41);//true 1是正则表达式[123]的开头,所以是true
//2.$ 行的结尾
String str42 = "3";
boolean b42 = str42.matches("[123]$");
System.out.println(b42);//true 3是正则表达式[123]的结尾,所以是true
//3.\b 单词边界
String str43 = "h";
boolean b43 = str43.matches("[hello]\\b");
System.out.println(b43);//true h或者o是正则表达式[hello]的边界,所以是true
/五、汉字正则表达
//把多个,用一个,来代替
String str51 = "hello ,,123,, 456";
String str52 = str51.replaceAll(",+"," ");
System.out.println(str52);//hello 123 456
/六、拆分
int sum = 0;
String str = "1+2+3+4+5";
//根据+把字符串分解
String []arry = str.split("\\+");
for(int i =0;i<arry.length;i++){
//字符转换成整型
int num = Integer.parseInt(arry[i]);
sum+=num;
}
System.out.println(sum);//15
//应用:
String str2 = "我的QQ是:456456 我的电话是:0532214 我的邮箱是:aaa123@aaa.com";
String []arry2 = str2.split(" ");
for(String num:arry2){
System.out.println(num);
}
//输出:
我的QQ是:456456
我的电话是:0532214
我的邮箱是:aaa123@aaa.com
//七、find()方法与group()方法
Pattern p = Pattern.compile("[a-z]{1,3}");//编译
Matcher m =p.matcher("javabC");//匹配
//第一次匹配
boolean b1 = m.find();
System.out.println(b1);//true
String c1= m.group();//返回由以前匹配操作所匹配的输入子序列。
System.out.println(c1);//输出jav
//第二次匹配
boolean b2 = m.find();
System.out.println(b2);
String c2= m.group();//返回由以前匹配操作所匹配的输入子序列。
System.out.println(c2);//输出ab
//第三次匹配
boolean b3 = m.find();
System.out.println(b3);//false
}
}