--------------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:\a\b\123.txt 将前面的路径按照 \ 分割 * 因为要把其分装到字符串("C:\a\b\123.txt")中,\a会把其转义,所以必须这样写"C:\\a\\b\\123.txt" * 因为还要按照\分割出来也要把分割规则封装成字符串,所以要使用"\\" * 因为"C:\\a\\b\\123.txt"中都是两个\\所以要增加一个双\\,即"\\" */ spitString("C:\\a\\b\\123.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="\\b\\d{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. 网页爬虫—正则表达式
就是读取 文件的内容或者是一个网上的网页内容,从其中找出你想要的内容,例如:邮箱地址,下面就是介绍获取邮箱的地址。
步骤:
2.获取正则表达式的匹配器
3.然后开始读取文件,一行一行的读取,在循环读取的时候,每一行都要与匹配器匹配
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培训.-----------期待与您交流! -------------------