正则表达式
介绍
正则表达式是对字符串做判断的。可以使用正则表达式的规则快速简单的判断出字符串是否符合规则。
字符类
[abc] :[]表示一个字符,里面写了abc表示这个字符可以是a或b或c
[^abc] :代表除a,b,c以外的任何字符
[a-z] :代表a到z这些所有的小写字母都可以
[0-9] :代表的是所有的数字都可以
[a-z0-9] :小写字母和数字都可以
逻辑运算符
[a-z&&[^d]] :可以是除了d之外的所有小写字母
[a|b|c] :a或b或c 和[abc]效果是一样的,所以这个不用
预定义字符
. :表示可以匹配任何字符
\d :表示0-9的数字,和[0-9]的效果是一样的
\w :表示单词字符,和[a-zA-Z_0-9]的效果是一样的
数量词
? : 表示0次或1次
* : 表示任意次
+ : 表示1次或多次
{n} : 必须出现n次
{n,} : 至少出现n次
{n,m}: 可以出现n到m次
分组括号
()代表分组,第一对儿小括号是第一组,二个对儿小括号是第二组
代码演示
public class Demo02正则演示 {
public static void main(String[] args) {
//字符串和正则表达式判断的方法
//只能是一个字符,且必须是abc中的一个
//boolean b = s.matches("[abc]");
//只能是一个字符,且必须是abc以外的字符
//boolean b = s.matches("[^abc]");
//必须是两个字符,且第一个字符是abc中的一个,第二个字符是def中的一个
//boolean b = s.matches("[abc][def]");
//可以匹配一个任何字符
//boolean b = s.matches(".");
//可以匹配一个数字
//boolean b = s.matches("\\d");
//出现0次或1次单词字符
//boolean b = s.matches("\\w?");
//出现一次或多次数字
//boolean b = s.matches("\\d+");
String s = "哈哈哈";
//第一位是单词字符,后面出现2到4个数字字符
//boolean b = s.matches("\\w\\d{2,4}"); //a0001-true B12-true 123-true
//呵呵 嘿嘿 哈哈 AA bb
//第一对儿()表示第一组,\\1表示再出现一次第一组的内容
//boolean b = s.matches("(.)\\1");
//第一对儿()表示第一组,\\1表示再出现一次第一组的内容{2}表示前面的内容出现2次
boolean b = s.matches("(.)\\1{2}"); //哈哈哈
String s = "哼哈哈哼";
//(.)表示第一组是任意字符 (.)表示第二组是任意字符 \\2表示第二组再出现一次 \\1表示第一组再出现一次
//一个组里面不是只能写一个字符可以任意写
boolean b = s.matches("(.)(.)\\2\\1");
System.out.println(b);
}
}
介绍两个字符串中和正则表达式相关的方法
split()
public class Demo03和正则相关的方法 {
public static void main(String[] args) {
/*
//split()
String s = “123,456,789”;
//split():切割
//按照,切割
String[] arr = s.split(",");
System.out.println(arr.length); //3
*/
//-------------------------------------------------
//split()
String s = "123.456.789";
//split():切割
//按照,切割
//方法的参数要的其实是一个正则表达式, .代表的是任意字符
//如果要让.代表点本身不让他代表任意字符,就需要转移
String[] arr = s.split("\\.");
System.out.println(arr.length); //3
}
}
replaceAll()
public class Demo04和正则相关的方法 {
public static void main(String[] args) {
String s = “just do it,wuyanzu521 nothing id impossible99”;
//replace() :用新的字符串代替旧的字符串
//用*把d都替换掉
System.out.println(s.replace("d","*"));
//replaceAll() :也是用新的字符串替换旧的字符串,但是第一个参数可以用正则
//.表示任意字符 在此时把所有字符都换成*
//System.out.println(s.replaceAll(".","*"));
//把每个数字换成*
//System.out.println(s.replaceAll("\\d","*"));
//把每段数字换成一个*
System.out.println(s.replaceAll("\\d+","*"));
}
}