正则表达式
正则表达式的作用是规定一个字符串的格式,正则表达式使用一些特殊的字符组合来描述格式。
fanchuanqi@qq.com
描述邮箱格式:
[a-zA-Z0-9_]+@[a-zA-Z0-9]+(.com|.cn|.net)
正则表达式中:
[]:描述一个字符 [a-z]:是小写字母
():将一组字符看为一个整体
|:描述或关系
量词:
+:表示前面的内容出现1到多次
*:表示前面的内容出现0到多次
?:表示前面的内容出现0到1次
+的作用代表前面描述的内容出现1次以上等同于{1,}
正则表达式的首尾:
^:表示字符串必须以其后面约束的内容开始
$:表示字符串必须以其前面约束的内容结尾
若正则表达式不书写^或者$,正则表达式代表匹配部分内容,都加上则
package day01;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 测试正则表达式
*/
public class TestRegex {
public static void main(String[] args) {
/*
* Pattern的作用是描述正则表达式的格式支持
* 使用静态方法compile注册正则表达式生成实例
*/
/*
* 邮箱格式的正则表达式
* fan_chuangqi1234@qq.com
*/
/*
* 使用java的字符串去描述正则表达式的时候,会出现一个冲突
* 如何描述正则表达式的"."。
* 起因:
* 在正则表达式中我们想描述一个".",但"."在正则表达式中有特殊的含义,它代表任意字符,所以我们在
* 正则表达式中想描述"."的原意就要写成"\."。
* 但是我们用java的字符串去描述正则表达式的时候,因为"."在java字符串中没有特殊的含义,所以java认为我们
* 书写String s = "\.";是有语法错误的,因为"."不需要转义。这就产生了冲突。
* 目的:
* 我们实际的目的很简单,就是要让java的字符串描述"\.",所以,那么在java中"\"是有特殊
* 含义的,代表转义字符,我们只需要将"\"转义为单纯的斜杠即可描述"\."了。
* 所以我们用java描述"\."的正确写法是String s = "\\.";
*/
//定义正则表达式
String regStr =
"^[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.com|\\.cn|\\.net)$";
//手机号的正则表达式
String regPhoneNumber = "^(\\+86)?\\d{11}$";
//^必须以后面表达式开始,$必须以前面约束的内容结尾
System.out.println(regStr);
//注册正则表达式
Pattern pattern = Pattern.compile(regStr);
String mailStr = "@fanchuang@yahoo.com";
//匹配字符串,返回描述匹配结果的Matcher实例
Matcher matcher = pattern.matcher(mailStr);//ctrl+o自动检索错误
//通过调用Matcher的find方法得知是否匹配成功
if(matcher.find()){
System.out.println("邮箱格式正确");
}else{
System.out.println("邮箱格式错误");
}
}
}
package day01;
import java.util.Arrays;
/*
* 测试字符串的拆分
*/
public class TestStringSplit {
public static void main(String[] args){
String info = "hello!world!java";
String[] array = info.split("!");
System.out.println(Arrays.toString(array));
/*
* 对图片名重新定义,要保留图片原来的后缀
*/
String name = "me.jpg";
String[] nameArray = name.split("\\.");//.在正则表达式中有特殊含义,加\\
System.out.println("数组的长度:"+nameArray.length);
String newName = "324235."+ nameArray[1];
System.out.println("新图片名:"+newName);
}
}
package day01;
/*
* 测试字符串替换操作
*/
public class TestReplace {
public static void main(String[] args) {
//定义一个字符串,数组和字母穿插
String info = "123ffds32432dfs23342sfds";
/*
* 目标:
* 将字符串中的数字部分替换为”#number#"
* repaceAll方法,可以替换字符串中满足正则表达式部分的内容。
* replaceAll(String regex,Strig replacement);
*/
String str = info.replaceAll("[0-9]+", "#number#");
System.out.println(str);
}
}