是一个字符串,使用单个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式一般被用来检索、替换那些符合某个规则的文本。java
参照帮助文档,在jdk中:java.util.regex.Pattern类中有正则表达式的的规则定义,正则表达式中明确区分大小写字母。咱们来学习语法规则。正则表达式
字符:x函数
含义:表明的是字符x学习
例如:匹配规则为 "a",那么须要匹配的字符串内容就是 ”a” 编码
字符:\\spa
含义:表明的是反斜线字符'\'code
例如:匹配规则为"\\" ,那么须要匹配的字符串内容就是 ”\”xml
字符:\tblog
含义:制表符ip
例如:匹配规则为"\t" ,那么对应的效果就是产生一个制表符的空间
字符:\n
含义:换行符
例如:匹配规则为"\n",那么对应的效果就是换行,光标在原有位置的下一行
字符:\r
含义:回车符
例如:匹配规则为"\r" ,那么对应的效果就是回车后的效果,光标来到下一行行首
字符类:[abc]
含义:表明的是字符a、b 或 c
例如:匹配规则为"[abc]" ,那么须要匹配的内容就是字符a,或者字符b,或字符c的一个
字符类:[^abc]
含义:表明的是除了 a、b 或 c之外的任何字符
例如:匹配规则为"[^abc]",那么须要匹配的内容就是否是字符a,或者不是字符b,或不是字符c的任意一个字符
字符类:[a-zA-Z]
含义:表明的是a 到 z 或 A 到 Z,两头的字母包括在内
例如:匹配规则为"[a-zA-Z]",那么须要匹配的是一个大写或者小写字母
字符类:[0-9]
含义:表明的是 0到9数字,两头的数字包括在内
例如:匹配规则为"[0-9]",那么须要匹配的是一个数字
字符类:[a-zA-Z_0-9]
含义:表明的字母或者数字或者下划线(即单词字符)
例如:匹配规则为" [a-zA-Z_0-9] ",那么须要匹配的是一个字母或者是一个数字或一个下滑线
预约义字符类:.
含义:表明的是任何字符
例如:匹配规则为" . ",那么须要匹配的是一个任意字符。若是,就想使用 . 的话,使用匹配规则"\\."来实现
预约义字符类:\d
含义:表明的是 0到9数字,两头的数字包括在内,至关于[0-9]
例如:匹配规则为"\d ",那么须要匹配的是一个数字
预约义字符类:\w
含义:表明的字母或者数字或者下划线(即单词字符),至关于[a-zA-Z_0-9]
例如:匹配规则为"\w ",,那么须要匹配的是一个字母或者是一个数字或一个下滑线
边界匹配器:^
含义:表明的是行的开头
例如:匹配规则为^[abc][0-9]$ ,那么须要匹配的内容从[abc]这个位置开始, 至关于左双引号
边界匹配器:$
含义:表明的是行的结尾
例如:匹配规则为^[abc][0-9]$ ,那么须要匹配的内容以[0-9]这个结束, 至关于右双引号
边界匹配器:\b
含义:表明的是单词边界
例如:匹配规则为"\b[abc]\b" ,那么表明的是字母a或b或c的左右两边须要的是非单词字符([a-zA-Z_0-9])
数量词:X?
含义:表明的是X出现一次或一次也没有
例如:匹配规则为"a?",那么须要匹配的内容是一个字符a,或者一个a都没有
数量词:X*
含义:表明的是X出现零次或屡次
例如:匹配规则为"a*" ,那么须要匹配的内容是多个字符a,或者一个a都没有
数量词:X+
含义:表明的是X出现一次或屡次
例如:匹配规则为"a+",那么须要匹配的内容是多个字符a,或者一个a
数量词:X{n}
含义:表明的是X出现刚好 n 次
例如:匹配规则为"a{5}",那么须要匹配的内容是5个字符a
数量词:X{n,}
含义:表明的是X出现至少 n 次
例如:匹配规则为"a{5, }",那么须要匹配的内容是最少有5个字符a
数量词:X{n,m}
含义:表明的是X出现至少 n 次,可是不超过 m 次
例如:匹配规则为"a{5,8}",那么须要匹配的内容是有5个字符a 到 8个字符a之间
①:请写出知足以下匹配规则的字符串:
规则:"[0-9]{6,12}"
解释:该规则须要匹配的内容是:长度为6位到12位的数字。
示例:使用数据"123456789"进行匹配结果为true;
使用数据"12345"进行匹配结果为false。
规则:"1[34578][0-9]{9}"
解释:该规则须要匹配的内容是:11位的手机号码,第1位为1,第2位为3、4、5、7、8中的一个,后面9位为0到9之间的任意数字。
示例:使用数据"12345678901"进行匹配结果为false;
使用数据"13312345678"进行匹配结果为true。
规则:"a*b"
解释:该规则须要匹配的内容是:在多个a或零个a后面有个b;b必须为最后一个字符。
示例:使用数据"aaaaab"进行匹配结果为true;
使用数据"abc"进行匹配结果为false。
规则:
匹配正整数:”\\d+”
匹配正小数:”\\d+\\.\\d+”
匹配负整数:”-\\d+”
匹配负小数:”-\\d+\\.\\d+”
匹配保留两位小数的正数:”\\d+\\.\\d{2}”
匹配保留1-3位小数的正数:”\\d+\\.\\d{1,3}”
解释:匹配正确的数字
规则:”[a-zA-Z_0-9]+@[a-zA-Z_0-9]+(\\.[a-zA-Z_0-9]+)+\\w+@\\w+(\\.\\w+)+”
解释:匹配合法的邮箱
代码示例:
1 /** 2 * matches(String regex):判断字符串是否匹配给定的规则 3 * 校验qq号码.规则:[1-9][0-9]{4,14} 4 * 1: 要求必须是5-15位数字 5 * 2: 0不能开头 6 */ 7 public void matchesTest(){ 8 String qq = "604154942"; 9 String regex = "[1-9][0-9]{4,14}"; 10 boolean flag = qq.matches(regex); 11 }
1 /** 2 * split(String regex):根据给定正则表达式的匹配规则,拆分此字符串 3 * 分割出字符串中的的数字:_ 4 * 经过"_"拆分 5 */ 6 public void splitTest01(){ 7 String s = "18-22-40-65"; 8 String regex = "-"; 9 String[] result = s.split(regex); 10 System.out.println(result);//[18,22,40,65]15 } 16 /** 17 * 按空格分割出字符串中的的数字: + 18 * 18 22 40 65 19 * 注意:当有多个空格的时候,正则条件不能单纯的写成“ ”(空格),这样只会匹配一个空格,切出来的数据不符合咱们要求, 20 * 要写成“ +”("空格+"),+表示匹配一个或多个 21 */ 22 public void splitTest02(){ 23 String s = "18 22 40 65"; 24 String regex = " +"; 25 String[] result = s.split(regex); 26 System.out.println(result);//[18,22,40,65] 27 }
1 /** 2 * 切IP地址:“\\.” 3 */ 4 public void splitTest03(){ 5 Spring ip = "127.0.0.1"; 6 // "."在正则中有特殊含义,经过转译符"\"将其转译 7 Spring regex = "\\."; 8 Spring[] result = ip.split(regex); 9 }
1 /** 2 * replaceAll(String regex,String replacement):将符合规则的字符串内容,所有替换为新字符串 3 * 将数字替换成#号 4 */ 5 public void replaceAllTest01(){ 6 String s = "Hello12345World6789012"; 7 // "\\d"匹配的是一个位置是否为数字 8 String regex = "[\\d]"; 9 String result = s.replaceAll(regex, "#"); 10 System.out.println(result); // 结果是:Hello#####World####### 11 } 12 /** 13 * 将数字替换成一个#号 14 */ 15 public void replaceAllTest02(){ 16 String s = "Hello12345World6789012"; 17 // "\\d"匹配的是一个位置是否为数字,+表示一个或多个,注意+不能写[]里面 18 String regex = "[\\d]+"; 19 String result = s.replaceAll(regex, "#"); 20 System.out.println(result); // 结果是:Hello#World#