正则表达式
2021/10/30 23:15:38
本文主要是介绍正则表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 概念
正则表达式:regex 给字符串定义正确规则的字符串表达式 api:参考String
- 涉及正则表达式的String方法
* boolean matches(String regex) :判断当前字符串是否匹配参数正则表达式 * String replaceAll(String regex, String replacement) :使用replacement替换当前字符串中与参数正则表达式匹配的所有子串 * String replaceFirst(String regex, String replacement) :使用replacement替换当前字符串中与参数正则表达式匹配的第一个子串 * String[] split(String regex) :使用与参数正则表达式匹配的所有子串 切割当前字符串
2 正则表达式
2.0 需求:
判断是否是手机号
//验证手机号 public static boolean test01Phone(String number){ if(number.length()!=11){ return false; } //判断第一个字符是不是1 if(number.charAt(0)!='1'){ return false; } //第二个字符:3/4/5/6/7/8/9 if(number.charAt(1)<'3'||number.charAt(1)>'9'){ return false; } //其他字符必须是数字 for (int i = 2; i <number.length(); i++) { char c=number.charAt(i); if(!Character.isDigit(c)){ return false; } } return true; } //正则表达式验证手机号 public static boolean test02Phone(String number){ //定义一个字符串:表示规则 String regex="1[3-9][0-9]{9}";//代码量少:但可读性差 //调用string的方法 使用规则 return number.matches(regex); }
2.1 使用正则的方式:(了解)
//正则表达式验证手机号 public static boolean test02Phone(String number){ //定义一个字符串:表示规则 String regex="1[3-9][0-9]{9}";//代码量少:但可读性差 //调用string的方法 使用规则 return number.matches(regex);//调用的是字符串的matches方法 } //正则表达式验证手机号 public static boolean test03Phone(String number){ Pattern p = Pattern.compile("1[3-9][0-9]{9}");//创建一个正则对象 并关联正则规则 Matcher m = p.matcher("aaaaab");//定义正则对象的matcher方法 关联需要判断的字符串 获取匹配器对象 boolean b = m.matches();//调用匹配器对象的matches方法 获取结果 //调用string的方法 使用规则 return b; }
2.2 总结
正则表达式 :使用一些特殊字符来表示固定的规则 学习重点: 有那些特殊字符 这些特殊字符都表示什么规则
3 正则表达式的规则
3.1 字符
x : 非特殊字符x 就表示x . : 任意字符 \ : 转义字符 \. : 字符. \\ : 字符\ ^ : 字符串开头 $ : 字符串结尾
3.2 范围:[]
[acfg] : acfg中的任意一个字符 [a-z] :编码表中a到z中的任意一个字符 [a-zB-F] :编码表中a到z和B到F中的任意一个字符 [^a-f] :除了a-f以外的任意一个字符 [a-z&&[d-g]]:取[a-z]与[d-g]的交集 等价于[d-g]
3.3 特殊范围
\d :所有数字字符 等价于[0-9] \D :所有非数字字符 等价于[^0-9] \w :所有单词字符 等价于[a-zA-Z_0-9] \W :所有非单词字符 等价于[^a-zA-Z_0-9] \s :所有空白字符 等价于[ \t\n\x0B\f\r] \S :所有非空白字符 等价于[^\s]
3.4 次数:{}
a? : a出现小于等于1次 a* : a出现大于等于0次 a+ : a出现大于等于1次 a{n} : a出现n次 a{n,} : a出现大于等于n次 a{n,m} : a出现大于等于n次 小于等于m次
3.5 复用:()
([a-z][0-9])+ :a3 a3b4n5
3.6 汉字
[\u4e00-\u9fa5]
4 测试方法
4.1 matches方法
//boolean matches(String regex) :判断当前字符串是否匹配参数正则表达式 public static void main(String[] args) { while(true){ System.out.println("请输入字符串!"); String line=new Scanner(System.in).nextLine(); test05(line); } } //1 判断用户名是否合法:由数字字母下划线组成 但不能以数字下划线开头 由6到8位 public static void test01(String s){ //1 定义字符串表示正则规则 String regex="[a-zA-Z][a-zA-Z0-9_]{5,7}"; //2 调用字符串的方法判断 boolean b=s.matches(regex); System.out.println(s+"::是否匹配规则:(由数字字母下划线组成 但不能以数字下划线开头 由6到8位)::"+b); } //2判断邮箱:miaotianbao@163.com // 昵称@邮箱服务器名称 多个后缀 public static void test02(String mail){ //1 定义字符串表示正则规则 String regex=".+";//.+ 任意字符 规则出现大于等于1次 :a aa ab regex=".+@.+(\\.[a-zA-Z]+)+";//.+ 任意字符 规则出现大于等于1次 :a aa ab //2 调用字符串的方法判断 boolean b=mail.matches(regex); System.out.println(mail+"::是否匹配规则:(是否是邮箱)::"+b); } //3 判断是不是中文名字 // 汉字:2-4个 public static void test03(String name){ //1 定义字符串表示正则规则:[\u4e00-\u9fa5] String regex="[\u4e00-\u9fa5]{2,4}"; //2 调用字符串的方法判断 boolean b=name.matches(regex); System.out.println(name+"::是否匹配规则:(是否是名字)::"+b); } //4判断字符串是不是叠词:aaaaaa bb ccccc 11111 public static void test04(String s){ //1 定义字符串表示正则规则: String regex="(.)\\1+";//()表示封装:组 regex="^(.)\\1+$";//字符串开头和字符串结尾 //(.) :把此位置处的字符封装为一个组:组名字从1开始 //\\1 :第一组的结果再出现一次 //\\1+ :第一组的结果再出现>=1次 //2 调用字符串的方法判断 boolean b=s.matches(regex); System.out.println(s+"::是否匹配规则:(叠词)::"+b); } //4判断字符串是不是叠词:格式如:aaaa1bb 前面是字母叠词 后面是字母叠词 中间是一个数字 public static void test05(String s){ //1 定义字符串表示正则规则: String regex="([a-zA-Z])\\1+[0-9]([a-zA-Z])\\2+";//()表示封装:组 //2 调用字符串的方法判断 boolean b=s.matches(regex); System.out.println(s+"::是否匹配规则:(特殊叠词)::"+b); }
4.2 split方法
//String[] split(String regex) :使用与参数正则表达式匹配的所有子串 切割当前字符串 public static void main(String[] args) { while(true){ System.out.println("请输入字符串!"); String line=new Scanner(System.in).nextLine(); test02(line); } } //1 :abc12dfg87ouy09yt6 使用非数字字符进行切割 public static void test01(String s){ //1 定义字符串表示正则规则 String regex="\\D+"; //2 调用字符串的方法判断 String[] arr=s.split(regex); System.out.println(s+"::切割:(使用非数字字符进行切割)::"+Arrays.toString(arr)); } //2:使用点切割 public static void test02(String s){ String[] arr=s.split(".");//使用任意字符切割 System.out.println(s+"::切割:(使用点切割)::"+Arrays.toString(arr)); arr=s.split("\\."); System.out.println(s+"::切割:(使用点切割)::"+Arrays.toString(arr)); }
4.3 replaceAll方法
//String[] split(String regex) :使用与参数正则表达式匹配的所有子串 切割当前字符串 public static void main(String[] args) { while(true){ System.out.println("请输入字符串!"); String line=new Scanner(System.in).nextLine(); test03(line); } } //1 :abc12dfg87ouy09yt6 获取其中的所有数字字符 public static void test01(String s){ //2 调用字符串的方法判断 String ss=s.replaceAll("\\D+", "");//把所有的非数字字符用空字符串替换 System.out.println(s+"::替换::"+ss); } //2 :字符串转换:去除叠词: 111aaaabbb222cdeee111--->1ab2cde1 public static void test02(String s){ //2 调用字符串的方法判断 String ss=s.replaceAll("(.)\\1+", "$1");//replaceAll方法的第二个参数中的$1 表示第一个参数的第一组的内容 System.out.println(s+"::替换::"+ss); } //3 :字符串转换:去除叠词: 1aa2a3bbb465dddd666ccca--->1a2a3b465d666ccca // 数字 叠词字母 数字---替换为 数字 字母 数字 1bbbb2 ---1b2 public static void test03(String s){ //2 调用字符串的方法判断 String ss=s.replaceAll("([0-9])([a-zA-Z])\\2+([0-9])", "$1$2$3");//replaceAll方法的第二个参数中的$1 表示第一个参数的第一组的内容 System.out.println(s+"::替换::"+ss); }
5 js中使用正则表达式
5.1 注意事项
- js中的正则表达式规则和java中完全相同
- js中创建正则表达式两种方式
var regex1=/1[3-9][0-9]{9}/i; //i表示不区分大小写 var regex2=new RegExp("1[3-9][0-9]{9}",i);
- js中可以使用正则的方法是:正则表达式对象的 boolean test(str);参数是要被判断的字符串对象
5.2 案例1
<form action="#" method="get"> <table> <tr> <th>用户名:</th> <td> <input type="text" name="uname" placeholder="用户名必须是2-4个汉字"/> <span id="span_uname"> </span> </td> </tr> <tr> <th>密码:</th> <td> <input type="text" name="upwd" placeholder="密码必须是6位数字"/> <span id="span_upwd"> </span> </td> </tr> <tr> <th>重复密码:</th> <td> <input type="text" name="reupwd" placeholder="必须和密码一致"/> <span id="span_reupwd"> </span> </td> </tr> <tr> <th>性别:</th> <td> 男:<input type="radio" name="usex" value="男"/> | 女:<input type="radio" name="usex" value="女"/> <span id="span_usex"> </span> </td> </tr> <tr> <th>爱好:</th> <td> 篮球:<input type="checkbox" name="uenjoy" value="篮球"/> | 足球:<input type="checkbox" name="uenjoy" value="足球"/> | 排球:<input type="checkbox" name="uenjoy" value="排球"/> | 台球:<input type="checkbox" name="uenjoy" value="台球"/> | 铅球:<input type="checkbox" name="uenjoy" value="铅球"/> <span id="span_uenjoy"> </span> </td> </tr> <tr> <th>邮箱:</th> <td> <input type="text" name="umail" placeholder="邮箱格式必须正确"/> <span id="span_umail"> </span> </td> </tr> <tr> <th colspan="2"><input type="submit" value="提交"/></th> </tr> </table> </form> <script type="text/javascript"> var bname=false; $(function(){ $("input[name='uname']").bind("blur",pdUname); }); //判断用户名是否正确 function pdUname(){ var uname=$("input[name='uname']").val(); var regex=/^[\u4e00-\u9fa5]{2,4}$/; bname=regex.test(uname); if(bname){ $("#span_uname").html("用户名可用!".fontcolor("blue").bold()); }else{ $("#span_uname").html("用户名必须是2-4个汉字!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var bpwd=false; $(function(){ $("input[name='upwd']").bind("blur",pdUpwd); }); //判断密码格式是否正确 function pdUpwd(){ var upwd=$("input[name='upwd']").val(); var regex=/^\d{6}$/; bpwd=regex.test(upwd); if(bpwd){ $("#span_upwd").html("密码可用!".fontcolor("blue").bold()); }else{ $("#span_upwd").html("密码必须是6个数字!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var brepwd=false; $(function(){ $("input[name='reupwd']").bind("blur",pdReupwd); }); //判断密码格式是否正确 function pdReupwd(){ //判断密码是否正确 pdUpwd(); if(!bpwd){ brepwd=false; $("#span_reupwd").html("密码格式错误!".fontcolor("red").bold()); return; } //判断密码和重复密码是否一致 var reupwd=$("input[name='reupwd']").val(); var upwd=$("input[name='upwd']").val(); brepwd=reupwd==upwd; if(brepwd){ $("#span_reupwd").html("重复密码正确!".fontcolor("blue").bold()); }else{ $("#span_reupwd").html("重复密码不正确!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var bsex=false; //判断性别是否选择 function pdUsex(){ var usex=$("input[name='usex']:checked").val(); bsex=usex; if(bsex){ $("#span_usex").html("性别已选!".fontcolor("blue").bold()); }else{ $("#span_usex").html("性别必须选择!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var benjoy=false; //判断爱好是否选择:至少两个 function pdUenjoy(){ var uenjoyColl=$("input[name='uenjoy']:checked"); benjoy=uenjoyColl.length>=2; if(benjoy){ $("#span_uenjoy").html("爱好已选择!".fontcolor("blue").bold()); }else{ $("#span_uenjoy").html("爱好至少两个!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var bmail=false; $(function(){ $("input[name='umail']").bind("blur",pdUmail); }); //判断邮箱是否正确 function pdUmail(){ var umail=$("input[name='umail']").val(); var regex=/^.+@.+(\.[a-z]+)+$/i; bmail=regex.test(umail); if(bmail){ $("#span_umail").html("邮箱格式正确!".fontcolor("blue").bold()); }else{ $("#span_umail").html("邮箱格式错误!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> $(function(){ $("form:first").bind("submit",function(){ pdUname(); pdUpwd(); pdReupwd(); pdUsex(); pdUenjoy(); pdUmail(); return bmail && benjoy && bsex && brepwd && bpwd && bname; }); }); </script>
5.3 案例2:方法复用
<form action="#" method="get"> <table> <tr> <th>用户名:</th> <td> <input type="text" name="uname" placeholder="用户名必须是2-4个汉字"/> <span id="span_uname"> </span> </td> </tr> <tr> <th>密码:</th> <td> <input type="text" name="upwd" placeholder="密码必须是6位数字"/> <span id="span_upwd"> </span> </td> </tr> <tr> <th>重复密码:</th> <td> <input type="text" name="reupwd" placeholder="必须和密码一致"/> <span id="span_reupwd"> </span> </td> </tr> <tr> <th>性别:</th> <td> 男:<input type="radio" name="usex" value="男"/> | 女:<input type="radio" name="usex" value="女"/> <span id="span_usex"> </span> </td> </tr> <tr> <th>爱好:</th> <td> 篮球:<input type="checkbox" name="uenjoy" value="篮球"/> | 足球:<input type="checkbox" name="uenjoy" value="足球"/> | 排球:<input type="checkbox" name="uenjoy" value="排球"/> | 台球:<input type="checkbox" name="uenjoy" value="台球"/> | 铅球:<input type="checkbox" name="uenjoy" value="铅球"/> <span id="span_uenjoy"> </span> </td> </tr> <tr> <th>邮箱:</th> <td> <input type="text" name="umail" placeholder="邮箱格式必须正确"/> <span id="span_umail"> </span> </td> </tr> <tr> <th colspan="2"><input type="submit" value="提交"/></th> </tr> </table> </form> <script type="text/javascript"> var bname=false; $(function(){ $("input[name='uname']").bind("blur",pdUname); }); function pdUname(){ bname=pd($("input[name='uname']"),/^[\u4e00-\u9fa5]{2,4}$/i,$("#span_uname"),"用户名必须是2-4个汉字!","用户名可用!"); } </script> <script type="text/javascript"> var bpwd=false; $(function(){ $("input[name='upwd']").bind("blur",pdUpwd); }); function pdUpwd(){ bpwd=pd($("input[name='upwd']"),/^\d{6}$/i,$("#span_upwd"),"密码必须是6个数字!","密码可用!"); } </script> <script type="text/javascript"> var brepwd=false; $(function(){ $("input[name='reupwd']").bind("blur",pdReupwd); }); //判断密码格式是否正确 function pdReupwd(){ //判断密码是否正确 pdUpwd(); if(!bpwd){ brepwd=false; $("#span_reupwd").html("密码格式错误!".fontcolor("red").bold()); return; } //判断密码和重复密码是否一致 var reupwd=$("input[name='reupwd']").val(); var upwd=$("input[name='upwd']").val(); brepwd=reupwd==upwd; if(brepwd){ $("#span_reupwd").html("重复密码正确!".fontcolor("blue").bold()); }else{ $("#span_reupwd").html("重复密码不正确!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var bsex=false; //判断性别是否选择 function pdUsex(){ var usex=$("input[name='usex']:checked").val(); bsex=usex; if(bsex){ $("#span_usex").html("性别已选!".fontcolor("blue").bold()); }else{ $("#span_usex").html("性别必须选择!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var benjoy=false; //判断爱好是否选择:至少两个 function pdUenjoy(){ var uenjoyColl=$("input[name='uenjoy']:checked"); benjoy=uenjoyColl.length>=2; if(benjoy){ $("#span_uenjoy").html("爱好已选择!".fontcolor("blue").bold()); }else{ $("#span_uenjoy").html("爱好至少两个!".fontcolor("red").bold()); } } </script> <script type="text/javascript"> var bmail=false; $(function(){ $("input[name='umail']").bind("blur",pdUmail); }); function pdUmail(){ bmail=pd($("input[name='umail']"),/^.+@.+(\.[a-z]+)+$/i,$("#span_umail"),"邮箱格式错误!","邮箱格式正确!"); } </script> <script type="text/javascript"> $(function(){ $("form:first").bind("submit",function(){ pdUname(); pdUpwd(); pdReupwd(); pdUsex(); pdUenjoy(); pdUmail(); return bmail && benjoy && bsex && brepwd && bpwd && bname; }); }); </script> <script type="text/javascript"> function pd($node,regex,$span,errorMessage,successMessage){ var b=regex.test($node.val()); if(b){ $span.html(successMessage.fontcolor("blue").bold()); }else{ $span.html(errorMessage.fontcolor("red").bold()); } return b; } </script>
这篇关于正则表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-11正则表达式教程:初学者指南
- 2024-09-11正则表达式学习:入门指南与实践技巧
- 2024-08-15正则表达式入门:基础教程与实践指南
- 2024-01-0939. 干货系列从零用Rust编写负载均衡及代理,正则及格式替换
- 2024-01-08如何编写高效的正则表达式?
- 2023-12-29"Matlab中的正则表达式:强大而灵活的工具"
- 2023-09-30这个正则 为啥同样的单号第二个就提取不出来?
- 2023-06-086.2 re 正则表达式
- 2023-06-06将字符串里的\x01,\x02这些替换掉用正则表达式无效?
- 2023-05-24正则表达式详解