<<正则表达式>>--黑马程序员
--------------ASP.Net+Android+IOS开发 . .Net培训.-----期待与您交流! -------- 1. 正则表达式的概述和作用。概述:正则表达式就是专门操作的字符串的, 优点:可以减少代码。简化书写 特点:就是用些特殊的字符来表示代码,更简便。 缺点:对于复杂的正则表达式,阅读性比较差。 2. 匹配—正则表示式1. 方法利用的是String类中的matchs(String regx). 2. QQ号码验证public class QQ { public static void main(String[]args) { /** * 要求:第一位不能0,长度为5-15位 */ Stringqq = "770700715";// qq号码 StringqqRegx = "[1-9]d{4,14}";// 正则表达式的判定字符串 if (qq.matches(qqRegx)) System.out.println("qq:" + qq + "是正确的!"); else System.out.println("qq:" + qq + "是错误的!"); } } 3. 邮箱验证
public class Email { public static void main(String[] args) { /** * 要求:必须有@符号,有.符号 * @符号前面可以是大小写,数字和下划线 (长度3-10)位 * @符号和.之间可以是大小写和数字。(长度2-3)为最后是以com结尾 * */ String emali = "770700715@126.com"; String emailRegx = "w{3,10}@[a-zA-Z0-9]{2,3}.com"; if (emali.matches(emailRegx)) System.out.println("邮箱正确"); else System.out.println("邮箱错误"); } } 注意点:对于w表示的是【a-zA-Z_0-9】,因为会被转义的,所以必须要写成w 同理,在字符串中要是有点(.)的话,那么要写成(.)
4. 中文名字验证
public class Name { public static void main(String[] args) { /** * 要求:名字是汉字的话,那么是2-3个汉字 * 名字要是字符的话,那么就是6-12位 */ String nameRegx="([u4E00-u9FA5]{2,3})||([A-Za-z]{6,12})"; String name="李四"; if(name.matches(nameRegx)) System.out.println("名字正确"); else System.out.println("名字不正确"); } }
3. 分割—正则表达式1. 分割含有转义符号的字符串
public class Spit { public static void main(String[] args) { /** * C:ab123.txt 将前面的路径按照 分割 * 因为要把其分装到字符串("C:ab123.txt")中,a会把其转义,所以必须这样写"C:ab123.txt" * 因为还要按照分割出来也要把分割规则封装成字符串,所以要使用"" * 因为"C:ab123.txt"中都是两个所以要增加一个双,即"" */ spitString("C:ab123.txt","\"); } public static void spitString(String str,String regex){ String [] ss=str.split(regex); for(String n: ss) System.out.println(n); } } 2. 利用组来分割组:就是把分割规则的结果还重复使用,使用()进行划分,那么就使用组,例如叠词。组还分号,从1开始分组,记忆小技巧:有几个括号就分为几个组,从左边开始数左括号,第一个左括号就是第一组,以此类推.
public class Spit { public static void main(String[] args) { /* * 按照叠词进行分割,那么就是使用组 * 在正则表达式中。 .表示任意字符,(.)1表示第二个位置的和第一个位置的相同,1 * 因为要封装到字符串中,1会呗转义,所以要"(.)1" * 要是是多个相同的话,那么就"(.)1+" */ spitString("1235ddd56ssd11de","(.)1+"); } public static void spitString(String str,String regex){ String [] ss=str.split(regex); for(String n: ss) System.out.println(n); } } 3.转义和组的结构图4. 获取—正则表示式步骤: 1. 将正则表达式封装成对象。 2. 将正则表达式和匹配的字符串关联起来 3. 获取字符串的匹配器 4. 通过匹配器引擎对字符串进行操作,例如:获取 注意:其实String类中的替换,匹配都是Pattern和Matcher综合运用,最后被String类封装了,操作就简单了,但是String类中还有没有在Matcher类中没有封装的方法,例如:获取。 import java.util.regex.Matcher; import java.util.regex.Pattern; public class find { public static void main(String[] args) { String str="123 56254855 452 1 56 458";//字符串 String regex="bd{3}b";//表示连续三个数字 // d{3}匹配规则 b表示的单词边界 /*将正则表达式封装成对象*/ Pattern pat=Pattern.compile(regex); /*将正则表达式和字符串关联起来,获得匹配器*/ Matcher matcher= pat.matcher(str); while(matcher.find()){//开始匹配 System.out.println(matcher.group());//获取匹配的内容 } } } 注意:在获取的时候,必须先去匹配,然后再去获取,匹配的时候,要注意匹配索引的变化。(start()和 end()) 5. 替代—正则表达式public class Replay { public static void main(String[] args) { /** * 将字符串中连续两个以上的数字替换成成#号 */ replayDemo("123ddd6ddf41y2y1d","d{2,}","#"); /** * 将字符串中的叠词用一个字符来替换,就用到了组,其中$1表示的是组中的第一组 */ replayDemo("a1113dfgkkksppd","(.)1+","$1"); } public static void replayDemo(String str,String regex,String s){ str=str.replaceAll(regex,s); System.out.println(str); } } 6. 网页爬虫—正则表达式就是读取 文件的内容或者是一个网上的网页内容,从其中找出你想要的内容,例如:邮箱地址,下面就是介绍获取邮箱的地址。 步骤: 1.获取读取文件的流, 2.获取正则表达式的匹配器 3.然后开始读取文件,一行一行的读取,在循环读取的时候,每一行都要与匹配器匹配 4.然后把匹配的内容读取出来后,写入到另一个文件中。 5.最后关闭流。
读取文件的--爬虫 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FindEmail { public static void main(String[] args) throws Exception { File file=new File("F:mail.txt"); BufferedReader buf=new BufferedReader(new FileReader(file));//读文件流 String regex="w+@[a-zA-Z0-9]+(.[a-zA-Z]+){1,3}"; Pattern p=Pattern.compile(regex); BufferedWriter writer=new BufferedWriter(new FileWriter("F:newMail.txt"));//写文件流 String line=null; while((line=buf.readLine())!=null){//读取文件 Matcher matcher=p.matcher(line); while(matcher.find()){//匹配 /*将获取的邮箱名写到另一个文件中*/ writer.write(matcher.group());//获取 writer.newLine();//换行 writer.flush();//刷新 } } writer.close(); buf.close(); } } 读取网上网页的上的邮箱地址--爬虫 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; public class FindEmaliByWangye { public static void main(String[] args) throws IOException { URL url = new URL("http://localhost:8088/android/index.jsp"); URLConnection conn = url.openConnection(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn .getInputStream())); String regex = "w+@[a-zA-Z0-9]+(.[a-zA-Z]+){1,3}"; Pattern p = Pattern.compile(regex); String line = null; while ((line = reader.readLine()) != null) {// 读取文件 Matcher matcher = p.matcher(line); while (matcher.find()) {// 匹配 System.out.println(matcher.group()); } } reader.close(); } } 7. 练习---正则表达式
public class regexText { public static void main(String[] args) { /*将此字符串变成我要学编程*/ String str = "我我我....我我我....我我我....要要要......要要要......要要要......学...学学学学...编编....程程..."; str=str.replaceAll(".+",""); str=str.replaceAll("(.)1+","$1"); System.out.println(str); } } 结果:我要学编程 ----------------------ASP.Net+Android+IOS开发 . .Net培训.-----------期待与您交流! ------------------- (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |