练习代码在文末
1.正则表达式简介
- 实际开发中,经常需要对字符串数据进行一些复杂的匹配、查找、替换等操作。通过“正则表达式”,可以方便的实现字符串的复杂操作
- 正则表达式是一串特定字符,组成一个“规则字符串”,这个“规则字符串”,是描述文本规则的工具。正则表达式就是记录文本规则的代码
- 例如:正则表达式:“[a-z]”表示a到z的任意一个字符;正则表达式“[a-z]+”表示有1个或多个a-z字符组成的字符串
2.常见的正则表达式
3.分组“()”
- 分组:()圆括号表示分组,可以将一系列正则表达式看做一个整体,分组时可以使用“|”表示“或”关系,例如:匹配手机号码前面的区号:
(+86|0086)?\s?\d{11}
上述例子中,圆括号表示这里需要出现“+86”或者“0086”
4.Demo
1.
package day02;
import java.util.Scanner;
/**
* 字符串支持正则表达式的方法之一:
* boolean matches(String regex);
* 根据给定的正则表达式验证当前字符串是否满足格式要求
* 满足则返回true,否则返回false
* @author 李玉
*
*/
public class Matches {
public static void main(String[] args) {
/**
* 电子邮箱的正则表达式
* [a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\.[a-zA-Z0-9]+)+
*/
String regex="[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9]+)+";
System.out.println(regex);
String mail="[email protected]";
boolean flag=mail.matches(regex);
if (flag) {
System.out.println("是邮箱");
}else {
System.out.println("不是邮箱");
}
/**
* 验证手机号的正则表达式
* 要求用户输入一个手机号,然后经过验证输出是否为手机号码
* 1[0-9]{10}
*/
System.out.println("请用户输入一个手机号: ");
Scanner scan=new Scanner(System.in);
String regex2="1[0-9]{10}";
String num=scan.next();
boolean flag2=num.matches(regex2);
if (flag2) {
System.out.println("是手机号");
} else {
System.out.println("不是手机号");
}
/*
* 身份证号的验证
* \d{17}[0-9xX]
*/
String id = "110104198810102410";
String regex1 = "^\\d{17}[0-9xX]$";
/*
* matches方法是完全匹配,无论我们是否
* 在正则表达式中是否书写了"^","$"
*/
boolean match = id.matches(regex1);
if(match){
System.out.println("是一个身份证号");
}else{
System.out.println("不是一个身份证号");
}
}
}
2.
package day02;
import java.util.Arrays;
/**
* 字符串支持正则表达式方法2:
* String[] split(String regex)
* 将当前字符串按照满足正则表达式的部分进行拆分
* 返回拆分后的每段内容
* @author 李玉
*
*/
public class splitDemo {
public static void main(String[] args) {
String str = "asd12123sda4651231sadasdasd4543sdasd56as87sadasda21das45adsd";
/*
* 保留每一段字母部分
* 按照数字拆分
*/
String[] array = str.split("[0-9]+");
System.out.println(array.length);
System.out.println(Arrays.toString(array));
}
}
package day02;
public class splitTest {
public static void main(String[] args) {
String imgName="1.jpg";
String names[] =imgName.split("\\.");
imgName=System.currentTimeMillis()+"."+names[1];
System.out.println(imgName);
}
}
3.
package day02;
/**
* 字符串支持正则表达式3:
* String replaceAll(String regex,String str)
* 将当前字符串中满足正则表达式的部分转换为给定的字符串
* @author 李玉
*
*/
public class replaceAll {
public static void main(String[] args) {
String str ="abc123abc12s3r";
//将数字部分替换为LIYU
str=str.replaceAll("\\d+", "LIYU");
System.out.println(str);
}
}
package day02;
//实现图片重命名
/**
* 构建和谐社会做贡献的ReplaceAll
* @author Administrator
*
*/
public class replaceAllDemo2 {
public static void main(String[] args){
String regex
= "(SB|WQNMLGB|TMB|NND|WC|NC|CNM)";
String message
= "WC!你个SB!怎么这么NC!WQNMLGB";
message
= message.replaceAll(regex, "*****");
System.out.println(message);
}
}