【黑马程序员】Java基础13:强大的正则

来源:互联网 发布:安全数据防泄密厂家 编辑:程序博客网 时间:2024/05/16 11:12
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------


一、正则概述

1、正则用来操作字符串的特殊方法,都在String类中,是符合一定语法规则的字符串表达形式;

2、学习正则,就是学习一些特殊符号的使用,它能够简单、快捷的对字符串进行操作。

示例:对QQ号码进行校验,要求:5-15位、0不能开头、只能是数字。

思路:如果用传统方法,首先要规定长度,然后再判断首字母,最后再规定QQ字符串只能是数字形式,相当麻烦,正则校验如下:

//示例:匹配QQ号码,一共5-15位,不能0开头,全是数字public static void checkQQ(){String QQ = "4555555555";String regex = "[1-9]\\d{4,14}";/*定义字符串的规则表达式第一位只能是1-9;第二位是 \d,即是0-9的数字,出现了4到14次*/boolean b = QQ.matches(regex);if(b)System.out.println("QQ:"+QQ+",输入正确");elseSystem.out.println("QQ:"+QQ+",输入错误");}

二、正则的具体操作功能

1匹配功能: boolean matches(String regex),用规则匹配整个字符串,只要有一处不符合规则,匹配结束返回false 

//匹配手机号,以13、15、18开头的11位数字public static void checkTel(){      String tel = "16900001111";      String telReg = "1[358]\\d{9}";      System.out.println(tel.matches(telReg));  } 

2切割功能String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。

  用点来切割、用反斜杠切割、按照叠词切割、空格切割等。

package blog.itheima;class RegexTest {public static void main(String[] args) {split("qwe.rfff.tjda.sf.hjj","\\.");//切割字符,其中有小数点split("E:\\JAVA\\Test\\1.6","\\\\");//用反斜杠把盘符和文件夹名切割出来split("qwerfffftjdasfhjjasgg","(.)\\1+");//按照叠词切割split("qwe   rfff  tjda      sf   hjj"," +");//切割字符,其中有空格}//正则的切割public static void split(String s, String regex){String[] arr = s.split(regex);for(String st : arr){System.out.println(st);}}}

3替换功能:String replaceAll(String regex, Stringreplacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 

package blog.itheima;class RegexTest {public static void main(String[] args) {replaceAll("qwerfffftjdasfhjjasgg","(.)\\1+","&");//把叠词换成字符&replaceAll("qwerfffftjdasfhjjasgg","(.)\\1+","$1");//把叠词换成相同的单个字母replaceAll("qwe12332234324asfhj234423432gg","\\d+","#");//把数字换成#号replaceAll("qwe12df4asj2342343tt23432gg","\\d{4,}","#");//若数字出现4个以上,就换成#号}//正则的替换public static void replaceAll(String str,String regex,String newStr){str = str.replaceAll(regex,newStr);System.out.println(str);}/*打印结果:qwer&tjdasfh&as&qwerftjdasfhjasgqwe#asfhj#ggqwe12df4asj#tt#gg*/}

4、获取功能:

import java.util.regex.Pattern;class RegexTest {public static void main(String[] args) {//切出三个字母的单词String str = "Ming tian jiu ke yi CRH hui Wuhan la, haha !";String regex = "\\b[a-zA-Z]{3}\\b";//其中 \b表示单词边界//将正则封装成对象Pattern p = Pattern.compile(regex);//获取正则匹配器,并和字符串相关联Matcher m = p.matcher(str);//boolean find() 按照匹配器的规则进行查找输入序列的下一个子序列。 while(m.find()){System.out.println(m.group());//返回符合规则的子序列System.out.println(m.start()+"-----"+m.end());//获得子序列在没改变字符串之前的初始和终止角标,包头不包尾}}}

三、选取正则四种功能的思路

1、如果只想知道该字符是对是错,使用匹配功能;

2、想要将已有的字符串变成另一个字符串,替换;

3、想要按照自定义的方式将字符串变成多个字符串(或者获取规则以外的字符串),切割;

4、想要拿到符合需求的字符串子串,获取。

 

四、代码实例

1、制作网页蜘蛛,对网页上的进行抓取,并打印到控制台

2将ip地址进行地址段自然排序。

package blog.itheima;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.util.Arrays;import java.util.regex.Matcher;import java.util.regex.Pattern;class RegexWebSpider {public static void main(String[] args) throws Exception{//getMails();ipSort();}//1、制作网页蜘蛛,对网页上的邮箱进行校验,并打印成文本文件。public static void getMails() throws Exception{//任意指定需要获取资源的网页URL url = new URL("http://tieba.baidu.com/p/2347771086?pid=33278533714&cid=0#33278533714");//也可以从指定文件中读取资源//BufferedReader bf = new BufferedReader(new FileReader("mail.txt"));//连接到url所引用的远程对象URLConnection conn = url.openConnection();BufferedReader bf = new BufferedReader(new InputStreamReader(conn.getInputStream()));//对邮箱进行验证: \w 单词字符:[a-zA-Z_0-9] String reg = "\\w+@\\w+(\\.\\w+)+";Pattern p = Pattern.compile(reg);String line = null;while ((line=bf.readLine())!=null){Matcher m = p.matcher(line);while(m.find()){System.out.println(m.group());}}}//2、将ip地址进行地址段自然排序。public static void ipSort(){String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";ip = ip.replaceAll("(\\d+)","00$1");//把一个或者多个数字当作一组,先补二个0System.out.println(ip);//只留后三位数,去掉前面0,0*指0个或多个ip = ip.replaceAll("0*(\\d{3})","$1");System.out.println(ip);String[] arr = ip.split(" ");Arrays.sort(arr);for(String a : arr){System.out.println(a.replaceAll("0*(\\d+)","$1"));}}}
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
0 0
原创粉丝点击