正则表达式
基本概念
其本质就是一个“规则字符串”,可以用于对字符串数据的格式进行验证,以及匹配、查找、替换等操作
该字符串通常使用==^运算符作为开头标志,使用$==运算符作为结尾标志,当然也可以省略
正则表达式规则
正则表达式 | 说明 |
---|
[abc] | 可以出现a、b、c中任意一个字符 |
[^abc] | 可以出现任何字符,除了a、b、c的任意字符 |
[a-z] | 可以出现a、b、c、……、z中的任意一个字符 |
[a-zA-Z0-9] | 可以出现a-z、A-Z、0-9中任意一个字符 |
正则表达式 | 说明 |
---|
. | 任意一个字符(通常不包含换行符) |
\d | 任意一个数字字符,相当于[0-9] |
\D | 任意一个非数字字符 |
\s | 空白字符,相当于[\t\n\x0B\f\r] |
\S | 非空白字符 |
\w | 任意一个单词字符,相当于[a-zA-Z_0-9] |
\W | 任意一个非单词字 |
正则表达式 | 说明 |
---|
^X | 表示必须以X开头 |
X$ | 表示必须以X结尾 |
X? | 表示X可以出现一次或一次也没有,也就是0 ~ 1次 |
X* | 表示X可以出现零次或多次,也就是0 ~ n次 |
X+ | 表示X可以出现一次或多次,也就是1 ~ n次 |
X{n} | 表示X可以出现恰好 n 次 |
X{n,} | 表示X可以出现至少 n 次,也就是>=n次 |
X{n,m} | 表示X可以出现至少 n 次,但是不超过 m 次,也就是>=n并且<=m |
正则表达式相关的方法
正则表达式 | 说明 |
---|
boolean matches(String regex) | 判断当前正在调用的字符串是否匹配参数指定的正则表达式规则 |
案例题目一
- 使用正则表达式描述一下银行卡密码的规则:要求是由6位数字组成。
- 正则表达式描述一下QQ号码的规则:要求是由非0开头的5~15位数组成。
- 正则表达式描述一下手机号码的规则:要求是由1开头,第二位数是3、4、5、7、8中的一位,总共11位
- 身份证号码的规则:总共18位,6位数字代表地区,4位数字代表年,2位数字代表月,2位数字代表日期, 3位数字代表个人,最后一位可能数字也可能是X。
public class StringRegTest {
public static void main(String[] args) {
String reg = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9|X])";
Scanner sc = new Scanner(System.in);
while(true) {
System.out.println("请输入您的身份证号码:");
String str = sc.next();
if (str.matches(reg)) {
System.out.println("输入字符串的格式正确!");
break;
} else {
System.out.println("输入字符串的格式错误!");
}
}
}
}
正则表达式 | 说明 |
---|
String[] split(String regex) | 参数regex为正则表达式,以regex所表示的字符串为分隔 符,将字符串拆分成字符串数组 |
String replace(char oldChar, char newChar) | 使用参数newChar替换此字符串中出现的所有参数 oldChar |
String replaceFirst(String regex, String replacement) | 替换此字符串匹配给定的正则表达式的第一个子字符串 |
String replaceAll(String regex, String replacement) | 将字符串中匹配正则表达式regex的字符串替换成 replacement |
案例题目二
public class StringRegMethodTest {
public static void main(String[] args) {
String str1 = "1001,zhangfei,30";
System.out.println("str1 = " + str1);
String[] sArr = str1.split(",");
for (int i = 0; i < sArr.length; i++) {
System.out.println("下标为"+i+ "的字符串是:" + sArr[i]);
}
System.out.println("----------------------------------------------------");
String str2 = "我的小名叫大帅哥";
String str3 = str2.replace('我', '你');
System.out.println("str2 = " + str2);
System.out.println("str3 = " + str3);
String str4 = str3.replace('大', '小');
System.out.println("str4 = " + str4);
String str5 = str4.replace('小', '大');
System.out.println("str5 = " + str5);
System.out.println("----------------------------------------------------");
String str6 = "123abc456def789ghi";
String str7 = str6.replaceFirst("\\d+", "#");
System.out.println("替换第一个字符串后的结果是:" + str7);
String str8 = str7.replaceAll("[a-z]+", "A");
System.out.println("str8 = " + str8);
}
}