正则表达式:
1、原义字符
字符本身就是一个正则
//字符串中有一个方法替换所有符合要求的字符串。
//String replaceAll(String regex, String replacement)
//regex表示要被替换的字符,replacement表示要替换的字符。
//如果没有匹配到符合正则表达式规则的式子,返回原来的字符串。
2、元字符:
字符类:
//表示格式:[]
//[]表示将字符进行归类,可以匹配出现在中括号中的任意一个字符
//regex = “[ab2]”;
//只要被匹配的字符串中存在a,b,2中任何一个,都会被替换
//regex = “[^ab2]”;
//^出现在中括号中,代表的意思式取反,对不是ab2的字符进行匹配
范围类 :基于字符类的基础之上增加的内容
//[a-z]表示的是匹配a到z中的任意一个小写字母
//[A-Z]表示的是匹配A到Z中的任意一个大写字母
//既想匹配小写又想匹配大写[a-zA-Z]
//想匹配数字咋办?用[0-9]
//既想匹配小写又想匹配大写和数字[a-zA-Z0-9]]
范围类缩写:
\d == [0-9] 数字 <regex = “\d”>第一个\表示转义字符
\D == [^0-9] 非数字
[\t\n\x0B\f\r] == \s 匹配所有空白字符:
[^ \t\n\x0B\f\r] == \S//匹配所有非空白字符
\w == [a-zA-Z0-9] //匹配所有的大小写字母和数字
\W == [^a-zA-Z0-9] 匹配所有的非大小写字母和数字
. 任何字符(与行结束符可能匹配也可能不匹配)
.匹配字符串中的.
边界字符
^:以xxx开头
$:以xxx结尾
\b:单词边界
\B:非单词边界
量词分类:
?:出现0次或者1次
+:出现1次或者多次
*:出现任意次
{n}:出现正好n次
{n,m}:出现n-m次
{n,}出现至少n次
3、分组
用小括号表示
//表示匹配abc这个整体出现了1次到2次 regex = “(abc){1,2}”;
4、反向引用
使用$引用对应组号的内容,每一个匹配的内容组号从1开始编号
String regex = “(\d{4})-(\d{2})-(\d{2})”;
String str = “2018-04-27 2021-12-17”;
System.out.println(str.replaceAll(regex, “$2/$3/$1”));
结果:04/27/2018 12/17/2021
//分组中如果不想要生成分组编号,可以通过?:来实现
regex = “(\d{4})-(?:\d{2})-(\d{2})”;
str = “2018-04-27 2021-12-17”;
System.out.println(str.replaceAll(regex, “$2/$1”));
结果:27/2018 17/2021
正则表达式在java中的应用
1、字符串的查找操作:Pattern和Matcher。
2、字符串匹配操作:可以用该字符串的matchers方法。
3、字符串的替换操作:字符串的replaceAll()和replaceFirst()方法。
4、字符串的分割:字符串的split()方法 是企业开发中常用的字符串分割方法。
regex = “\w{3,7}”;
Pattern compile = Pattern.compile(regex);
Matcher matcher = compile.matcher(“abcd123aaaa112321dddd333”);
//总匹配结果,会截取掉第一次匹配的结果
System.out.println(matcher.matches());//false
//第二次匹配结果
System.out.println(matcher.find());//true
System.out.println(matcher.end());//14
System.out.println(matcher.group());//aaaa112
//第三次匹配结果
System.out.println(matcher.find());//true
System.out.println(matcher.end());//21
System.out.println(matcher.group());321dddd