正则表达式:符合某种规则的字符串
作用:我们可以使用它校验一个其他的字符串,还可以使用它替换符合规则的字符串,还可以使用它切割符合规则的字符串
需求:校验QQ号,全是数字,0不能开头,长度为5-15位
QQ号:“123456”
可以使用正则表达式校验
正则:"[1-9][0-9]{4,14}"
还可以校验,用户名,密码,邮箱,手机号…
要求:能看懂别人写的正则就可以了
需要了解的正则:
表示范围的:[]
[abc]:代表的是字符a、b 或 c中的,任意一个 “a” “b” “c” true “w” false
[a-zA-Z]:代表的是a 到 z 或 A 到 Z,两头的字母包括在内,任意一个
[0-9]:代表的是 0到9数字,两头的数字包括在内,任意一个
[a-zA-Z_0-9]:代表的字母或者数字或者下划线,任意一个
范围可以自己定义:[ab12]
表示数量:{}
X{n} 代表的是X出现恰好 n 次 a{3} “aaa”;true “aaaa”:false “bac”:false
X{n,}代表的是X出现至少 n 次 x出现的次数>=n个 a{3,} “aa”;false “aaaa”:true
X{n,m}代表的是X出现至少 n 次,但是不超过 m 次 n<=x<=m
X? 代表的是X出现一次或一次也没有 “abc”? “abc”/"":true “abcabc”:false
X+ 代表的是X出现一次或多次 “a”+ “a…a”/“a”:true “”/“b”:false
X*(X?+X+)代表的是X出现零次或多次 1* “1”/“1…1”/"":true “aa”:false
String类中和正则表达式有关的方法
public boolean matches(String regex)
判断字符串是否匹配给定的规则
public String[] split(String regex)
根据给定正则表达式的匹配规则,拆分此字符串
String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
一些正则表达式的案例:
public class Demo01Regex {
public static void main(String[] args) {
replaceAll();
}
/*
* 可以把符合正则表达式的字符串,替换为一个新的字符串
* 可以过滤关键字
*/
private static void replaceAll() {
String s = "123DFDSFewrew中1国##11#2#";
//需求:把字符串中每一个数字,替换为一个@_@
String ss = s.replaceAll("[0-9]", "@_@");
System.out.println(s);
System.out.println(ss);
//需求:把字符串中的连续数字,替换为一个@_@
ss = s.replaceAll("[0-9]+", "@_@");
System.out.println(s);
System.out.println(ss);
}
/*
* 192.168.1.100
* .在正则表达式中有特殊含义:代表任意的字符
* 可以使用转义字符:\ 正则表达式中两个\\代表一个\
* 我们可以使用转义字符,把有特殊含义的.转换为一个普通的.-->\\.
*/
private static void split03() {
char c = '\'';//使用转义字符把有特殊含义的',变成普通的'使用,\'是一个字符
System.out.println(c);
System.out.println("姓名\t年龄");//把使用转义字符,把普通的字符t,变成一个制表符tal
String[] arr = "192.168.1.100".split("\\.");
System.out.println("数组的长度:"+arr.length);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
* 11 22 33 44
* 11 22 33 44-->" +":使用一个或者多个出现的空格进行切割
*/
private static void split02() {
String[] arr = "11 22 33 44".split(" ");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println("----------");
String[] arr2 = "11 22 33 44".split(" +");
System.out.println("数组的长度:"+arr2.length);
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
/*
* 11-22-33-44
*/
private static void split01() {
String[] arr = "11-22-33-44".split("-");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
* 举例:校验手机号码
* 1:要求为11位数字
* 2:第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
*
* 正则:"1[34578][0-9]{9}"
*/
private static void checkPhoneNumber() {
String phoneNumber = "13800138000";//true
phoneNumber = "138001380000";//12位 false
phoneNumber = "1380013800O";//12位 false
phoneNumber = "1380013800";//10位 false
phoneNumber = "23800138000";//10位 false
String regex = "1[34578][0-9]{9}";
boolean b = phoneNumber.matches(regex);
System.out.println(b);
}
/*
* 举例:校验qq号码.
* 1:要求必须是5-15位数字
* 2:0不能开头
*
* 正则:"[1-9][0-9]{4,14}"
*/
private static void checkQQ() {
String qq = "123456";//true
qq = "123a456";//false
qq = "1234";//false
qq = "0123456";//false
qq = "12345678910111213";//false
String regex = "[1-9][0-9]{4,14}";
boolean b = qq.matches(regex);
System.out.println(b);
}
}