标签:
package regular; import java.util.regex.Matcher; import java.util.regex.Pattern; /* 正则表达式:符合一定规则的表达式 作用:用于专门操作字符串 特点:用一些特定的符号来表示一些代码的操作,这样就简化书写。 所以学习正则表达工,就是在学习一些特殊符号的使用 好处:可以简化对字符串的复杂操作。 弊端:符号定义越多,正则越长,阅读性越差 具体操作功能: 1.匹配:String matches方法。用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false */ public class RegexDemo { public static void main(String[] args) { checkQQ(); demo(); splitDemo("zhangsan,lishi,wangwu",",");//按照,进行切换 splitDemo("zhangsan lishi wangwu"," +");//按照多个空格进行切割 splitDemo("zhangsan.lishi.wangwu","\\.");//按照多个空格进行切割 splitDemo("c:\\abc\\a.txt","\\\\");//去掉反斜杠 splitDemo("erkktykkqqquio","(.)\\1+" );//按照叠词来完成切割 //可以将规则封装成一个组,用()完成,组出现都有编号,从1开始,想要使用已有的组可以通过 //\n(n就是组的编号)的形式来获取 replaceDemo("s tr in g"," +"," ");//将多个空格替换成一个空格 String str="wer1289980000ty12345654uiod12435676f"; replaceDemo(str,"\\d{5,}","#");//将数字替换成# String str1="erkktyqqquizzzzzo"; replaceDemo(str1,"(.)\\1+","&");//将叠词替换成& replaceDemo(str1,"(.)\\1+","$1");//叠词替换成一个,$1表示拿前一个规则的第一个组 getDemo(); } /* 正则表达式的第四个功能 4.获取:将字符串的符合规则的子串取出 操作步骤: 1.将正则表达式封装成对象 2.让正则表达对象和要操作的字符串相关联 3.关联后,获取正则匹配引擎 4.通过引擎对符合规则的子串进行操作,比如取出 */ public static void getDemo(){ String str="ming jian jiu yao fang jia le ,da jia."; String reg="\\b[a-z]{4}\\b"; //将规则封装成对象 Pattern p =Pattern.compile(reg); //让正则表达对象和要操作的字符串相关联 Matcher m=p.matcher(str); System.out.println(m.matches()); //其实String类中的matches方法,用的就是 pattern和mattcher对象来完成的 //只不过被String的方法封装后,用起来较为简单,但是功能单一 boolean b=m.find();//将规则使用到字符串上,并进行符合规则的子串查找 System.out.println(b); //System.out.println(m.group());//用于获取匹配后的结果 //System.out.println("matchers:"+m.matches()); while(m.find()){ System.out.println(m.group()); System.err.println(m.start()+"..."+m.end()); } } //替换 public static void replaceDemo(String str,String regex,String newStr){ String s=str.replaceAll(regex,newStr); System.out.println(s); } //切割 public static void splitDemo(String str,String regex){ String[] arr=str.split(regex); for(String s:arr){ System.out.println(s); } } //\\d 代表'\d' public static void demo(){ String str="bc9999"; String regex="[bcd][a-z]\\d+";//表示第一个字符只能是bcd中一个,且只有一字符,第二个字符只能是a-z boolean flag=str.matches(regex); System.out.println(flag); checkTel(); } /* 匹配 手机号段只有 13xxx 15xxx 18xxx */ public static void checkTel(){ String tel="13800000000"; String telReg="1[358]\\d{9}"; boolean b=tel.matches(telReg); System.out.println(b); } /* 正则验证QQ号码 */ public static void checkQQ(){ String qq="02121212"; String regex="[1-9]\\d{4,14}"; boolean flag=qq.matches(regex); if(flag){ System.out.println("is ok..."); }else{ System.out.println("is nonono..."); } } /* 对QQ号码进行校验 要求:5-15 0不能开头,只能是数字 这种方式:使用了String类中的方法,进行组合完成了需求 ,但是代码过于复杂 */ public static void checkQQ_1() { String qq = "12345"; int len = qq.length(); if (len >= 5 && len <= 15) { if (!qq.startsWith("0")) { try{ Long l=Long.parseLong(qq); System.out.println("qq:"+qq); }catch(NumberFormatException e){ System.out.println("出现了非法字符"); } /*char[] arr = qq.toCharArray(); boolean flag = false; for (int x = 0; x < arr.length; x++) { if (!(arr[x] >= '0' && arr[x] <= '9')) { flag = true; break; } } if (!flag) { System.err.println("qq:" + qq); } else { System.out.println("qq号码中现了非法字符 "); }*/ }else{ System.out.println("不可以0开始"); } }else{ System.out.println("长度错误"); } } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012750578/article/details/47087757