黑马程序员_Java基础_正则表达式
2012-08-30 08:05
751 查看
-------
android培训、java培训、期待与您交流! ----------
一、正则表达式(特点)
正则表达式:符合一定规则的表达式。
特点:用一些特定的符号来表示一些代码操作,这样就简化书写。
所以学习正则表达式就是在学习一些特殊符号的使用。
作用:用于操作字符串。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
先来看一个示例:
二、正则表达式(匹配)
三、正则表达式(切割)
四、正则表达式(替换)
五、正则表达式(获取)
六、正则表达式(练习1)
七、正则表达式(练习2)
八、正则表达式(网页爬虫)
网页:
-------
android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.csdn.net/heima/
android培训、java培训、期待与您交流! ----------
一、正则表达式(特点)
正则表达式:符合一定规则的表达式。
特点:用一些特定的符号来表示一些代码操作,这样就简化书写。
所以学习正则表达式就是在学习一些特殊符号的使用。
作用:用于操作字符串。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差。
先来看一个示例:
/* 示例: */ class RegexDemo { public static void main(String[] args) { checkQQ_1(); checkQQ_2(); } /* 对QQ号码进行校验: 要求:5-15位。0不能开头,只能是数字。 */ public static void checkQQ_2()//使用正则表达式 { String qq="1a234576"; String regex="[1-9][0-9]{4,14}"; boolean flag=qq.matches(regex); if(flag) { System.out.println("QQ:"+qq); } else { System.out.println("输入不合法"); } } public static void checkQQ_1()//这种方式使用String类中的方法,进行组合完成了需求。但是代码国语复杂。 { String qq="123456"; int len=qq.length(); if(len>=5 && len<=15) { if(!qq.startsWith("0")) { try { Long l=Long.parseLong(qq); System.out.println("QQ:"+l); } catch (NumberFormatException e) { System.out.println("出现非法字符"); } /* char[] arr=qq.toCharArray(); boolean flag=true; for(int i=0;i<arr.length;i++) { if(!(arr[i]>='0' && arr[i]<='9')) { flag=false; break; } } if(flag) { System.out.println("qq:"+qq); } else { System.out.println("出现非法字符"); } */ } else { System.out.println("不可以以0开头"); } } else { System.out.println("长度错误。"); } } }
二、正则表达式(匹配)
/* 具体操作功能: 1.匹配。public boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。 */ class RegexDemo2 { public static void main(String[] args) { checkTel(); } public static void checkTel()//手机号码段只有 187******** 150******** 178******** { String str1="18712334567"; String str2="10012334567"; String reg="1[578]\\d{9}"; System.out.println(str1.matches(reg)); System.out.println(str2.matches(reg)); } }
三、正则表达式(切割)
/* 具体操作功能: 2.切割。public String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。 */ class RegexDemo3 { public static void main(String[] args) { splitDemo("zhangsan lisi wangwu zhaoliu"," +");//切割包含多个空格的 System.out.println(); splitDemo("zhangsan.lisi.wangwu.zhaoliu","\\.");//切割包含.的 System.out.println(); splitDemo("c:\\abc\\a.txt","\\\\");//切割目录 System.out.println(); splitDemo("asdfassssdjfkzzzzzzodff","(.)\\1+");/* 按照叠词完成切割,为了可以让规则的结果被重用, 可以将规则封装成一个组,用()完成。组的出现都有编号, 从1开始,想要使用自己已有的组,可以通过\n(n是组的编号) 的形式来获取。 */ } public static void splitDemo(String str,String reg) { String[] arr=str.split(reg); for(String s:arr) { System.out.println(s); } } }
四、正则表达式(替换)
/* 具体操作功能: 3.替换。public String replaceAll(String regex,String replacement): 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 */ class RegexDemo4 { public static void main(String[] args) { String str1="asdvfsa123124356asjdf4334543234iupok43234123fsa"; replaceAllDemo(str1,"\\d{5,}","#");//将字符串中的数字长度大于5的子段替换成# String str2="asdfssswqqqfsdffff";//将重叠的字符替换成单个字母。例如: ssss----->s replaceAllDemo(str2,"(.)\\1+","$1"); } public static void replaceAllDemo(String str,String reg,String newStr) { str=str.replaceAll(reg,newStr); System.out.println(str); } }
五、正则表达式(获取)
/* 具体操作功能: 4.获取:将字符串中的符合规则的子串取出。 步骤: 1.将正则表达式封装成对象。 2.让正则对象和要操作的字符串相关联。 3.关联后,获取正则匹配引擎。 4.通过引擎对符合规则的字串进行操作,例如取出。 */ import java.util.regex.*; class RegexDemo5 { public static void main(String[] args) { getDemo(); } public static void getDemo() { String str="java ji chu"; String reg="\\b[a-z]{3}\\b"; //将规则封装成对象。 Pattern p=Pattern.compile(reg); //让正则对象和要作用的字符串相关联,获取匹配器对象。 Matcher m=p.matcher(str); //System.out.println(m.matches());/*String类中的matches方法用的就是Pattern和Matcher对象来完成的*/ /*只不过被String的方法封装后,用起来较为简单,但功能单一。*/ //System.out.println("matches:"+m.matches());//注意:同一个匹配器用的同一个指针。 while(m.find())//将规则作用到字符串上,并进行符合规则的子串查找。 { System.out.println(m.group());//用于获取匹配后结果。 } } }
六、正则表达式(练习1)
/* 需求: 将下列字符串转成:我要学编程 用四种功能的哪一个呢?或哪几个呢? 思路: 1.如果只想知道该字符是否是对是错,使用匹配。 2.想要将已有的字符串变成另一个字符串,替换。 3.想要按照自定的方式将字符串编程多个字符串,切割。获取规则以外的子串。 4.想要拿到符合要求的字符串的字串,获取。获取符合规则的子串。 */ class RegexText { public static void main(String[] args) { test_1(); } public static void test_1() { String str="我我我我.....我我我我..要..要要要要要...要要要要.学.学.学学学.编.编..编编编.程.程程程.程"; /* 将已有字符串编程另一个字符串,使用替换功能。 1.可以现将.去掉 2.再将多个重复的内容变成单个内容。 */ str=str.replaceAll("\\.+",""); System.out.println(str); str=str.replaceAll("(.)\\1+","$1"); System.out.println(str); } }
七、正则表达式(练习2)
/* 192.168.1.1 102.49.23.013 10.10.10.10 2.2.2.8 8.109.90.30 将ip地址进行地址段顺序排序。 还按照字符串自然顺序,只要让它们每一段都是3位即可。 1.按照每一段需要的对多的0进行补齐,那么每一段就会至少保证有3位。 2.将每一段只保留3位。这样,所有的ip地址都是每一段3位。 */ import java.util.*; class RegexText2 { public static void main(String[] args) { ipSort(); checkMail(); } public static void ipSort() { String ip="192.168.1.1 102.49.23.013 10.10.10.10 2.2.2.8 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.split(" "); TreeSet<String> ts=new TreeSet<String>(); for(String s:arr) { ts.add(s); } System.out.println(); for(String s:ts) { System.out.println(s.replaceAll("0*(\\d+)","$1")); } } public static void checkMail() { String mail="abc@sohu.com.cn"; String reg="[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,3}";//精确匹配 //reg="\\w+@\\w+(\\.\\w+){1,3}";//相对不太精确的匹配 1@2.1 就没意义了 System.out.println(); System.out.println(mail.matches(reg)); } }
八、正则表达式(网页爬虫)
网页:
<html> <head> <title> 邮件获取 </title> </head> <body> <div> djkfjalksdjflkdsajf zhangsan@126.com asdfaewfsdaf;wefaskjfdalkdsf alewjflkadsg lisi@sohu.com aslkjf;lsakdfj;oiewajflakjdsg;lkajdsgaaldskfljklj fdjglkadjglkasdjf;lkjdsaf;lksaef ;lrsjg;;rajg aslkd;kdjflkjlsad arewjgalkfdjg;lkfdajg; w wangwu@126.com eokflasjglkajfd;glaijdg; welkjliewajugijfdalkg arj;lewaoigfla </div> </body> </html>
/* 网页爬虫(蜘蛛)。 */ import java.net.*; import java.io.*; import java.util.regex.*; class RegexText3 { public static void main(String[] args)throws Exception { getMails(); } public static void getMails()throws Exception { /* 获取邮件地址。使用Pattern Matcher */ URL url=new URL("http://172.16.56.254:8080/myweb/mail.html"); URLConnection conn=url.openConnection(); BufferedReader bufrIn=new BufferedReader(new InputStreamReader(conn.getInputStream())); String line=null; String mailreg="\\w+@\\w+(\\.\\w+){1,3}"; Pattern p=Pattern.compile(mailreg); while((line=bufrIn.readLine())!=null) { Matcher m=p.matcher(line); while(m.find()) { System.out.println(m.group()); } } } }
-------
android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.csdn.net/heima/
相关文章推荐
- 黑马程序员 java基础之正则表达式
- 黑马程序员——Java基础:反射、JDK1.5新特性、正则表达式
- 黑马程序员--java基础--正则表达式总结
- 黑马程序员——Java基础---正则表达式
- 黑马程序员_Java基础_正则表达式_25
- 黑马程序员_java基础-正则表达式
- 黑马程序员-->Java基础-->正则表达式
- 黑马程序员——Java基础正则表达式、反射
- 黑马程序员---------------JAVA基础--------正则表达式
- 黑马程序员——JAVA基础---正则表达式切割组的问题
- 黑马程序员——高新技术---Java基础-常用类-正则表达式,Math类,Random类,System类,Date类
- 黑马程序员学习log第九篇基础知识:JAVA的面向对象之正则表达式及反射总结
- 黑马程序员——Java基础---面向对象(Character类、正则表达式、Date)
- 黑马程序员————java基础————正则表达式
- 黑马程序员-Java基础(数组,String,StringBuffer,正则表达式)
- 黑马程序员——Java基础---正则表达式
- 黑马程序员——Java基础-----正则表达式
- 黑马程序员 16 Java基础教学 - 16 - 正则表达式总结
- 黑马程序员---从头开始,回忆JAVA基础之正则表达式。
- 黑马程序员-----java基础(正则表达式和反射)