黑马程序员--第二十五天:正则表达式
2013-06-02 21:50
302 查看
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
/*25-1_4 正则表达式:符合一定规则的表达式。 作用:用于专门操作字符串。 特点:用一些特定的符合来表示一些代码操作。这样可以简化书写。 所以学习正则表达式就是在学习一些特殊符合的使用。 好处:可以简化对字符串的复杂操作。 弊端:符合定义越多,正则越长,阅读性越差。 具体功能: 1. 匹配:String matches(); 方法。 用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。 2. 切割:String split(); 3. 替换:replaceAll(String regex,String replacement); 4. 获取: java.util.regex */ class RegexDemo { public static void main(String[] args) { String str = "adfasf fdfa s df "; String reg = " +";//按空格一次或多次的规则 splitDemo("adfasf fdfa s df "," +"); String str1 = "adfasf.adfasdf.dsfasd.asdf.dfs"; String reg1 = "\\."; splitDemo("adfasf.adfasdf.dsfasd.asdf.dfs","\\."); String str1 = "c:\\abc\\a.txt"; String reg1 = "\\."; splitDemo("c:\\abc\\a.txt","\\\\");// \\ + \\ = \ + \ splitDemo("adffdfddwrwrr","(.)\\1");//按叠词的规则()内的内容被封装成一个组, //用以捕获该组的内容(结果), \1 表示第一组。 //checkQQ(); //System.out.println("Hello World!"); String str = "ewrwe32443432334bxv342345r2"; //把数字组替换成 #; replaceAllDemo(str,"\\d{5,}","#"); String str1 = "ewwwdfsdzzzzzzzz"; //将叠词替换成&。 replaceAllDemo(str1,"(.)\\1+","&"); replaceAllDemo(str1,"(.)\\1+","$1");//将重叠的字符替换成单个字符 zzzzz --> z; //$ 是获取 字符串 外的组 } public static void replaceAllDemo(String str, String reg, String newstr){ str = str.replaceAll(reg,newstr); System.out.println(str); } public static void splitDemo(String str,String reg){ String str = "adfasf fdfa s df "; String str1 = "adfasf.adfasdf.dsfasd.asdf.dfs"; String reg = " +";//按空格一次或多次的规则 String reg1 = "\\."; String[] arr = str.split(reg); for(String s : arr){ System.out.println(s); } } //匹配:手机号 13xxx 15xxx 18xxx public static void checkTel(){ String tel = "1348989359"; String telReg = "1[358]\\d{9}"; System.out.println(tel.matches(telReg); } public static void demo(){ String str = "a"; String reg = "[bcd]"; boolean b = str.matches(reg); System.out.print(b); } public static void checkQQ(){ String qq = "12324354323"; String regex = "[0-9][0-9]{4,14}"; if(qq.matches(regex)) System.out.println("this account is valid"); else System.out.println("this account is invalid"); } } /*组和捕获 捕获组可以通过从左到右计算其开括号来编号。 例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C) */ /*25-5 正则表达式的第四个功能: 4. 获取:将字符串中的符合规则的字串取出。 操作步骤: 1. 将正则表达式封装成对象。 2. 让正则对象和要操作的字符串相关联。 3. 关联后,获取正则匹配引擎。 4. 通过引擎对符合规则的字串进行操作,比如取出。 */ class RegexDemo2 { public static void main(String[] args) { System.out.println("Hello World!"); } } class Reg { public void getDemo(){ String str = "ming tian jiu yao fang jia le"; String reg = "[a-z]{3}\\b"; String reg = "\\b[a-z]{3}\\b"; //将规则封装成对象。 Pattern p = Pattern.compile(reg); //让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m = p.matcher(str); //其实String类的matches()方法,用的就是Pattern 和 Matcher 来完成的。 //只不过被String的方法封装后,用起来较为简单,但方法单一。 System.out.println(m.matches()); //boolean b = m.find();//将规则作用在字符串上,并进行符合规则的子串查找。 //System.out.println(b); //System.out.println(m.group());//用于获取匹配后的结果。 //System.out.println("matches:" + m.matches());//matches()方法作用于整个字符串。 while(m.find()){ System.out.println(m.group()); System.out.println(m.start()+ "....." + m.end()); } /* str = "12132"; reg = "[1-9]\\d{4,14}"; //将规则封装成对象。 Pattern p = Pattern.compile(reg); //让正则对象和要作用的字符串相关联。获取匹配器对象。 Matcher m = p.matcher(str); //其实String类的matches()方法,用的就是Pattern 和 Matcher 来完成的。 //只不过被String的方法封装后,用起来较为简单,但方法单一。 System.out.println(m.matches()); */ } } /*25-6 需求: 将下列字符串转换成:我要学编程。 到底用四种功能的哪一种呢?或哪几种 思路: 1.如果只想知道该字符串是对是错,使用匹配。 2.想要将已有的字符串变成另一个字符串,替换 3.想要按照自定的方式将字符串变成多个字符串,切割。 4.想要拿到符合要求的字符串字串,获取 切割与获取的比较: 切割是返回符合规则以外的字串。 获取的返回符合规则的字串。 */ class { public static void main(String[] args) { String str = "我...我我...我..要要...要要..要学学...学学.学...学编编..编...编..程..程...程程"; /* 将已有的字符串变成另一个字符串。使用 替换功能。 1.可以先将.去掉。 2.再将多个重复的内容变成单个内容。 */ str = str.replaceAll("\\.+",""); System.out.println(str); str = str.replaceAll("(.)\\1+","$1"); System.out.println(str); } } /* 将ip地址进行地址段顺序的排序。 还按照字符串的字符串的自然顺序,只要让它们每一段都是3位即可。 1.按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。 2.将每一段只保留3位。这样,所有的ip地址都是每一段3位。 */ class Demo { public static void ipSort(){ String ip = "192.68.1.254 102.49.23.13 10.10.10.10 2.2.2.2 8.109.90.30" ip = ip.replaceAll("(\\d+)","00$1"); System.out.println(ip); ip = ip.replaceAll("0*(\\d{3})","$1"); System.out.println(ip); String[] arr = ip.spliet(" +"); TreeSet<String> ts = new TreeSet<String>(); for(String s : arr){ ts.add(s); } for(String s: ts){ System.out.println(s.replaceAll("0*(\\d+)","$1")); } } /* 需求:对硬件地址进行校验。 */ public static void checkMail(){ String mail = "adfdc1332@sina.com"; String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9_]+(\\.[a-zA-Z]+)+";//较为精确的匹配 reg = "\\w+@\\w+(\\.\\w+)+";//相对不太精确的匹配。 mail.indexOf("@")!==-1; System.out.println(mail.matches(reg)); } public static void main(String[] args) { System.out.println("Hello World!"); } } /* 25-8 */ class { public static void getMails()throws Exception{ URL url = new URL("http://192.168.1.245:8080/myweb/mail.html"); URLConnection conn = url.openConnection(); BufferedReader bufr = new BufferedReader(new InputStreamReader(conn.getInputStream())); BufferedReader bufr = new BufferedReader(new FileReader("mail.txt")); String mailreg = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(mailreg); while((line=bufr.readLine())!=null){ Matcher m = p.matcher(line); while(m.find()){ System.out.println(m.group()); } } } public static void main(String[] args) { System.out.println("Hello World!"); } }
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------
相关文章推荐
- 黑马程序员——正则表达式(2)自制模糊查询
- 黑马程序员——正则表达式
- 黑马程序员——java基础——正则表达式
- 黑马程序员——Java正则表达式
- 黑马程序员——反射与正则表达式
- 黑马程序员-java学习笔记-正则表达式
- 黑马程序员--java--反射和正则表达式
- 黑马程序员------------------正则表达式
- 黑马程序员---正则表达式
- [黑马程序员] 我给大家讲解正则表达式(一)
- 黑马程序员——Java基础之反射,正则表达式
- 黑马程序员:Java基础总结----正则表达式
- 『黑马程序员』---java--网络编程--正则表达式
- 黑马程序员——正则表达式
- 黑马程序员——正则表达式(1)
- 黑马程序员_正则表达式
- 黑马程序员_正则表达式
- 黑马程序员——正则表达式
- 黑马程序员-->09_正则表达式
- 黑马程序员——Java基础---正则表达式