Java正则表达式Pattern和Matcher类
Java正则表达式Pattern和Matcher类
- 遇到的问题在通过excel导入数据时,需要导入的数据符合区间类型int,int类型的数据,为了避免用户在Excel中使用错误的符号,导致后面的数据判断出错,所以就在后台进行统一判断。
- 解决方案
- 拿到Excel中的数据之后进行是否存在特殊字符串的判断
sign
就是字符串中存在的特殊字符
- 之后将特殊字符之前之后的数据取出,重新字符串组合
- 学习
- Pattern类的作用在于编译正则表达式后创建一个匹配模式,把规则编译成模式对象
- Matcher类使用Pattern实例提供的模式信息对正则表达式进行匹配,通过模式对象得到匹配器对象
- Pattern常用方法的介绍
Pattern.pattren()
返回正则表达式的字符串形式1
2Pattern p=Pattern.compile("\\w+");
p.pattern(); //返回 \w+
Pattern.split(CharSequence input)
该方法用于分割字符串,并返回一个String[]1
2Pattern p=Pattern.compile("\\d+");
String[] str=p.split("电话是:1234:邮箱是:aaa@aaa.com");
Pattern.matchers(String regex,CharSequence input)
该方法是一个静态方法,用于快速匹配字符串,该方法将会匹配全部字符串1
2
3Pattern.matches("\\d+","2223");//返回true
Pattern.matches("\\d+","2223aa");//返回false,需要匹配到所有字符串才能返回true,这里aa不能匹配到
Pattern.matches("\\d+","22bb23");//返回false,需要匹配到所有字符串才能返回true,这里bb不能匹配到
这里的匹配涉及到正则表达式 \d匹配一个数字后面的加号意思是说明前面这个\d的数字为1到多个
- 上述方法等同于
1
2
3Pattern p =Pattern.compile("a*b");
Matcher m =p.matcher("aaaaab");
m.matches(); - Matcher的常用方法介绍
- 1.
Matcher.matches()
matches()方法匹配的是整个字符串1
2
3
4
5
6Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.matches();//返回false,因为bb不能被\d+匹配,导致整个字符串匹配未成功.
Matcher m2=p.matcher("2223");
m2.matches();//返回true,因为\d+匹配到了整个字符串 Matcher.lookingAt()
lookingAt()对最前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true.1
2
3
4
5Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.lookingAt();//返回true,因为\d+匹配到了前面的22
Matcher m2=p.matcher("aa2223");
m2.lookingAt();//返回false,因为\d+不能匹配前面的aa
Matcher.find()
对指定的字符串进行匹配,匹配到的字符串可以在任意位置。1
2
3
4
5
6
7
8
9Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("22bb23");
m.find();//返回true
Matcher m2=p.matcher("aa2223");
m2.find();//返回true
Matcher m3=p.matcher("aa2223bb");
m3.find();//返回true
Matcher m4=p.matcher("aabb");
m4.find();//返回false
Matcher.start()
返回匹配到的子字符串在字符串中的起始位置。1
2
3
4Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aaa2223bb");
m.find();//匹配2223
m.start();//返回3
Matcher.end()
返回匹配到的子字符串的最后一个字符的下一个索引值。
Matcher.group()
返回匹配到地字符串注意:在使用之前必须使用find()1
2
3
4Pattern p=Pattern.compile("\\d+");
Matcher m=p.matcher("aaa2223bb");
m.find();//匹配2223
m.group();//返回2223
Matcher.start(int, i), Matcher.end(int, i), Matcher.group(int, i), Matcher.groupCount()
分组操作1
2
3
4
5
6
7
8
9
10Pattern p=Pattern.compile("([a-z]+)(\\d+)"); //()表示分组,意义是括号内是一个整体
Matcher m=p.matcher("aaa2223bb");
m.find(); //匹配aaa2223
m.groupCount(); //返回2,因为有2组
m.start(1); //返回0 返回第一组匹配到的子字符串在字符串中的索引号
m.start(2); //返回3 返回第二组匹配到的子字符串在字符串中的索引号
m.end(1); //返回3 返回第一组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.end(2); //返回7 返回第二组匹配到的子字符串的最后一个字符在字符串中的索引位置.
m.group(1); //返回aaa,返回第一组匹配到的子字符串
m.group(2); //返回2223,返回第二组匹配到的子字符串
只有当匹配成功后,才可以使用start(), end(), group()方法,否则会抛出java.lang.IllegalStateException
- 正则的表达式用法
Java正则表达式Pattern和Matcher类
http://example.com/2022/11/15/Java正则表达式Pattern和Matcher类/