正则表达式:
1、正则表达式就是字符串中字符出现的规则,就是字符串的规则定义,就是字符串出现的次序规律。
2、作用:经常需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过正则表达式,可以方便的实现字符串的复杂操作。
1)、文本内容检索:在文件中查询需要的内容,如检查一段文字中是否包含敏感词
2)、文本规则检查:检查文件是否符合规范,如检查一个String是否符合Email的规则
3)、文本处理:拆分、替换等等
3、java php javascript等很多语言都支持正则表达式
4、开发工具、操作系统(例如ubuntu中的命令)也支持正则表达式
5、Java的正规规则详细手册
java.util.regex.Pattern
字符集:表示一个字符的选择范围
例如:正则表达式:“[a-z]”表示a到z的任意一个字符,[ ]是字符集
数词:用来约定左侧字符出现的次数
如:0{6}:表示6个0
matches(正则表达式)方法:
将一个字符串与正则表达式进行匹配,如果成功返回true,否则返回false。
public void testRegex() {
String r1="[a-z]*";//a-z出现0个或者多个
String r2="\\w+\\.jar";//前面是字符,后面是.jar文件,“\”必须转义为“\\”
//matches是String提供的API方法,可以检查当前字符串是否符合正则规则
//如检查“abcde”是否符合r1的规则
System.out.println("abcde".matches(r1));
System.out.println("junit.jar".matches(r2));
System.out.println("*.jar".matches(r2));//false,*不属于\w的范围
}
public void testRegex2() {
String r="(\\+86|0086)?\\s?\\d{11}";//+86|0086 ?表示可有可无,\s表示空格 ,\d表示数字,{11}表示\d这个数字有11个
String phone1="15619273822";//true
String phone2="+86 13857402876";//true
String phone3="0086 19837465873";//true
String phone4="8619284758376";//false
System.out.println(phone1.matches(r));
System.out.println(phone2.matches(r));
System.out.println(phone3.matches(r));
System.out.println(phone4.matches(r));
}
split:
String的split方法可以将字符串按照特定的分隔符拆分成字符串数组
split之后是一个数组
String[]split(String regex);以regex所表示的字符串为分隔符,将字符串拆分成字符串数组
public void testSplit() {
//按空格拆分
String str="java cpp php c# object-c";
String[] strArr=str.split("\\s");//按空格拆分
System.out.println(Arrays.toString(strArr));//把字符串转换为数组[java, cpp, php, c#, object-c]
//按+、-、=符号拆分
String line="100+200-150=150";
strArr=line.split("[\\+\\-=]");//如果不加\的话+表示多个,如果不加\的话-表示连接符,例如a-z表示a到z,而=不需要加
System.out.println(Arrays.toString(strArr));//[100, 200, 150, 150]
}
public void testSplit2() {
String cmd="get day01.zip day02.zip";
//1、检查是否是合理的get命令
//2、如果是get命令,就将文件名列表读取到数组中
//策略:
//1)利用正则表达式检查命令格式
//2)利用正则表达式切分
String getRule="^get(\\s+.+)";//^表示从头开始,get命令的规则以get开头,后面有空格,空格以后是文件名,
//文件名是任意的字符用.表示,+表示1个到任意多个
String[] files=null;
if(cmd.matches(getRule)) {
System.out.println("这是一个get命令");
String[] data=cmd.split("\\s+");//以空格拆分,data用于盛放文件名列表
files=new String[data.length-1];//除去get
System.arraycopy(data, 1, files, 0, data.length-1);
}
System.out.println(Arrays.toString(files));
}
正则表达式:
1、字符集:[^abc]:表示除了abc之外的任意字符
2、预定义字符集:
. 表示任意一个字符
\d 表示任意一个数字字符,相当于[0-9]
\w 表示单词字符,相当于[a-z0-9A-Z_]
\s 表示空白字符,相当于[\t\n\x\f\r]
\D 表示得数字字符
\W 表示非单词字符
\S 表示非空白字符
3、数量词
X? 表示0个或1个X
X* 表示0个或任意多个X
X+ 表示1个到任意多个X
X{n} 表示n个X
X{n,} 表示n个到任意多个X
X{n,m} 表示n个到m个X
replaceAll方法:
StringreplaceAll(String regex,String replacement):将字符串中匹配正则表达式regex的字符串替换成replacement。如果新字符串和原字符串一样,则也返回新字符串。
public void testReplaceAll() {
//将str中的所有数字替换为”数字“2字
String str="abc123bcd45ef6g7890";
str=str.replaceAll("\\d+", "数字");//\d+表示一个到任意多个都替换成后面的
System.out.println(str);//输出的是新字符串,原字符串不变,abc数字bcd数字ef数字g数字
}