正则表达式经典实例
正则表达式的常用操作:
* 1:匹配:
* 使用的是String类中的boolean matches(String regex)方法
* 2:切割:
* 使用的是String类中的String[] split(String regex)
* 3:替换:
* String replaceAll(String regex,String replacement)
* 4:获取:
* 从一个字符串得到所有符合某个正则规则的内容
* Pattern
* Matcher
第一题
匹配电话号码
public static void piPei() { String tel = "13534781023"; String regex = "1[34578]\\d{9}"; boolean b = tel.matches(regex); System.out.println(b); }@H_301_35@第二题
已知字符串:zhanngsan***lisi&&&&&wangwu######zhaoliugwwwwwwwzhouqi,把之中的人名获取出来。
public static void qieGe() { String str = "zhanngsan***lisi&&&&&wangwu######zhaoliugwwwwwwwzhouqi"; //重复字母中的第一位是任意字符,第二位跟第一位一样,然后可以有多个 String regex = "(.)\\1+"; String[] arr = str.split(regex); for(String ss:arr) { System.out.println(ss); } }@H_301_35@
第三题
已知字符串:zhangsan***lisi&&&&&wangwu######liunengwwwwwwwxieyingwu,去除重复字母
已知字符串:woeiuoie3457948herehk09856909457809sdfhsdkjfh5987689762344,去除8位以上的数字
已知字符串:18620982678,把手机号码中间4位用*代替
public static void tiHuan() { //去除重复字母 String str1 = "zhangsan***lisi&&&&&wangwu######liunengwwwwwwwxieyingwu"; str1 = str1.replaceAll("(.)\\1+","$1");//$1 表示取正则表达式中第一组的值 System.out.println(str1); //去除8位以上的数字 String str2 = "woeiuoie3457948herehk09856909457809sdfhsdkjfh5987689762344"; str2 = str2.replaceAll("\\d{8,}","****"); System.out.println(str2); //把手机号码中间4位用*代替 String str3 = "18620982678"; str3 = str3.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"); System.out.println(str3); }@H_301_35@输出结果是:
zhangsan*lisi&wangwu#liunengwxieyingwu
woeiuoie3457948herehk****sdfhsdkjfh****
186****2678第四题
已知字符串:I like you very much.获取4个字母组成的单词
public static void huoQu() { String str = "I like you very much."; String regex = "[a-z]{4}"; //把字符串形式的正则表达式编译成Patter类型的对象 //Pattern类型的对象不具备获取的功能 Pattern pattern = Pattern.compile(regex); //Matcher对象的作用是:从str中获取符合pattern规则的内容 Matcher m = pattern.matcher(str); //使用Matcher对象获取 while(m.find()) { System.out.println(m.group()); } }@H_301_35@
第五题
已知字符串:我我..我我..我.我要...要要...要要...要学学....学学学...编编...编编..编程...程程...程程..程.程,要求,转成:我要学编程
public static void main(String[] args) { String str = "我我..我我..我.我要...要要...要要...要学学....学学学...编编...编编..编程...程程...程程..程.程"; //先去除. str = str.replaceAll("\\.+",""); System.out.println(str); //在去除重复汉字 str = str.replaceAll("(.)\\1+","$1"); System.out.println(str); }@H_301_35@
第六题
对ip地址按照数值顺序排序。
192.168.1.2 10.10.10.10 4.4.4.4 127.0.0.1public static void main(String[] args) { String str = "192.168.1.200 10.10.10.10 4.4.4.4 127.0.0.1"; //每个值前边儿补2位0 str = str.replaceAll("(\\d{1,3})","00$1"); System.out.println(str); //每个值保留3位 str = str.replaceAll("0*(\\d{3})","$1"); System.out.println(str); //按照空格切割出每个IP地址 String[] arr = str.split(" +"); Arrays.sort(arr); for(String ss:arr) { System.out.println(ss.replaceAll("0*(\\d{1,"$1")); } }@H_301_35@
第七题
对邮件地址进行匹配
public static void main(String[] args) { String email = "lisi_001@sina.com.cn"; //String regex = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+){1,2}"; String regex = "\\w+@\\w+(\\.\\w+)+"; System.out.println(email.matches(regex)); }@H_301_35@
第八题
网页爬虫,获取网页上的邮箱
//从网络上的网页获取邮箱 public static void getEmail() throws IOException { String path = "http://localhost:8080/myweb/mail.html"; URL url = new URL(path); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream();//读取服务器端返回的mail.html文件的数据 BufferedReader br = new BufferedReader(new InputStreamReader(in)); String regex = "\\w+@\\w+(\\.\\w+)+"; Pattern p = Pattern.compile(regex); String line = null; while((line = br.readLine())!=null) { //使用Matcher对象从读取的一行中获取符合邮箱规则的内容 Matcher m = p.matcher(line); while(m.find()) { System.out.println(m.group()); } } }@H_301_35@