一、概述
最近进行软件构造第三次实验,其中有一个任务,便是用正则表达式判断输入是否合法,而且期末考试也设计正则表达式,所以我便找了一些文章示例简单地学习正则表达式,以此作为笔记记录以下。若有错误,感谢指正。
二、部分规则及示例
1、[]
以[]来表示可以接收的字符列表
例如:[abc]表示可以接收a、b、c中任一个字符
2、[^]
表示不接受的字符列表
例如:[^abc]表示接受的字符既不能是a,也不能是b,也不能是c
3、\\
表示反斜线\
例如:\\t表示制表符\t
4、.
可以匹配任意除\n以外的字符
5、\\d
表示匹配任一个数字字符,等同于[0-9]
6、\\w
表示匹配数字大小写字母中的任意一个,等同于[0-9a-zA-Z]
7、(?i)
表示后接字符串不区分大小写
例如:(?i)abc表示可以接收ABC,abC等6中情况
8、*
表示前面的字符重复n次,n>=0
例如:a*可以接收aaaa,即任意个a,包括空
9、+
表示前面的字符重复m次,m>0
例如a+可以接收aaaa,即至少有一个a
10、?
表示前面的字符出现0次或1次
11、{n}
表示前面的只能出现n次
例如:[abcd]{3}能接受abc,acd,bcd等
12、{n,}
表示前面的字符串至少出现n次
13、{m,n}
表示前面的字符串至少出现m次,至多出现n次
14、^
边界匹配器,表示指定起始字符
例如:^[0-9]就是指定一个数字字符开始
15、$
边界匹配器,表示指定结束字符
例如:[0-9]$表示指定数字字符结尾
16、a|b
表示两侧的字符串a或b都可以接受,或的关系
17、ab
表示匹配的就是ab,与的关系
18、(ab)
表示匹配的ab作为一个整体存在
三、举例
手机号的匹配格式:1[0-9]{10},表示第一位是1,后面接10个数字的长度为11的字符串
四、Java中正则表达式的常用方法
1、matches(String regex)
功能:判断字符串是否符合输入的规则格式
例如:检验手机号码,规则如上例
public void testMatches(){
String phone=18834565678;
String regex="1[0-9]{10}";
boolean sMatch=phone.matches(regex);
}
此时sMatch的结果为true
2、split(String regex)
功能:根据给定的正则表达式的规则进行切割字符串
例如:根据逗号分割字符串
public void testSplit(){
String s="11,12,13,14,15";
String regex=",";
String[] sSplit=s.split(regex);
}
此时调用split方法返回了根据逗号切割而成的数组
3、replaceAll(String regex,String replacement)
功能:根据正则表达式的规则,把字符串中符合规则的部分用替代的字符串代替
例如:把字符串中的数字替换成?
public void testReplaceAll(){
String s="123ABC12ab";
String regex="[0-9]";
String sReplace=s.replaceAll(regex,s);
}
此时得到的sReplace为???ABC??ab