正则表达式:
根据规则快速匹配信息Pattern
是最终类
正则表达式的基本原理
正则表达式是对字符串进行操作的
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
正则表达式经常被用来检索,匹配,修改符合一定规则的字符串。
正则表达式的优点:
用一些特定的符号代替一些代码操作,这样可以简化书写。
可以迅速地用极简单的方式达到字符串的复杂控制。
灵活性、逻辑性和功能性非常的强。
学习要点:
正则表达式是就是在学习一些特殊符号的使用。
学习字符串的匹配,切割,替换,获取
常用的正则表达式:
[abc] 表示一个字符串只能有一个字符,他可以是a,b,c中的一个
[abc][a-z] 第一个字符如上,第二个字符是a到z中的一个
[^abc]除了abc的以外的字符
[a-zA-Z] a-z大小写都行
\d 数字:[0-9]
\D 非数字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 单词字符:[a-zA-Z_0-9]
\W 非单词字符:[^\w]
X? 表示有一个或者一个也没有
X+ 表示一次或多次
X* 表示零次或多次
X{n} 恰好n次
X{n,} 至少n次
X{n,m} 至少n次,最多m次
代码:
public static void main(String[] args) {
//匹配字符串abc
String str="abc";
System.out.println("abc".equals(str));
//1.匹配规则
Pattern p= Pattern.compile("abc");
//2.指定匹配规则
Matcher m= p.matcher(str);
//做匹配
System.out.println(m.matches());
}
}
----
public class PatternDemo2 {
public static void main(String[] args) {
String s="\t";
//System.out.println(s.matches("abc"));
//匹配小写英文字母
//[起始,结束]表示范围里面其中的一个
System.out.println(s.matches("\\\t"));//只能匹配一个
//匹配除x/y/z外的其他字符"[^xyz]"^表示取反
//如何匹配"." 用"\\."匹配
//匹配"\" 用"\\\\" 匹配
//\t 用\\\t 或\t 匹配
//如何匹配多个 [a-z].+[]\\d 类似于+的这种字符控制字符出现的个数
//数量词修饰的是前面的字符 +--表示前面的字符最少出现一次
//匹配以a开头,以数字结尾最多三个字符//a.?[0-9]
//?--表示前面的字符最多出现一次。
//匹配以a开头,以b结尾的字符串"a.*b"
//*代表前面的字符可以出现也可以不出现
//匹配5个a的字符串a{5}
//{}表示前面的字符具体出现多少次
//匹配最少10个字符 ",{10,}"
//{,}左边表示最小,右边表示最大,但没有最小区间
}
}
----
public class PatternDemo3 {
public static void main(String[] args) {
//用正则表达式匹配字符串出现ab
String s="uabj";
System.out.println(s.matches(".*ab.*"));
//匹配两个ab
System.out.println(s.matches(".*ab.*ab.*"));
//()---捕获组的意思,有几个小括号就有几个捕获组\\n表示取第几个编号
/**
* 捕获组如何编号?以左括号开始到对应的右括号结束
* 利用捕获组进行匹配叠字
*/
}
}
----
public class PatternDemo4 {
public static void main(String[] args) {
String s="aafjn33fk24332f22f";
//进行替换
System.out.println(s.replace("a", "b"));
//利用正则进行替换,replaceAll()
System.out.println(s.replaceAll("[a-z]", "+"));
//把数字进行快速的排序
String str=s.replaceAll("[^0-9]", "");
char[] cs=str.toCharArray();
Arrays.sort(cs);
System.out.println(Arrays.toString(cs));
//
System.out.println(s.replaceAll("\\?", "+"));
//[ ]里面不能出现 任何数量词
System.out.println(s.replaceAll("\\[|\\]", "+"));
//如果想取另外一个表达式的值,需要通过$符号去取
System.out.println(s.replaceAll("(tom)(.*)(jack)", "$3$2$1"));
//可以去重
System.out.println(s.replaceAll("(.)\\1+","$1" ));
}
}
字符串的切割
要点
主要用到java.lang.String.split()
返回的是一个数组
实例
把一个带空格的字符串截取成一个字符串数组
String str="ni shi wo de yan";
//这个匹配规则表示切割的是一个或多个空格
String regex=" +"
String[] arr=str.split(regex);
//得到的结果就是arr[0]="ni",arr[1]="shi",arr[2]="wo",
arr[3]="de",arr[4]="yan"
一个要点
str.split("(.)\1")(.) 表示第一个词是一个匹配任意字符的组。一个规则被编为一个组,每个组都有一个编号,想要使用这个组可以通过\n的形式来提取,n代表的组的编号。\ \1 表示匹配第一个词,多加一个,是为了转义。