黑马程序员-----正则表达式

来源:互联网 发布:开80端口 编辑:程序博客网 时间:2024/06/05 19:06

——- android培训、java培训、期待与您交流! ———-

一、 正则表达式的概述:

1、 正则表达式用于操作字符串数据的,通过一些特定的符号来表现的。简化了代码,提高了效率,但同时也降低了阅读性。
2、 常见的特殊符号;
1) 特殊字符:

\\:反斜线\r:回车\n:换行

2) 字符类:

 [abc]a,b或者c的任意一个。[^abc]:除了a,b,c以外的字符。[a-zA-Z]:包括了26个英文字母。[0-9]:包括了0-9这个10个数字字符。

3) 预定义字符类:

 .任意字符\d 数字[0-9]\D 非数字[^0-9] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w]

4) 边界匹配器:

 ^ 行的开头 $ 行的结尾 \b 单词边界

5) Greedy 数量词:

 x? 0次或1次x* 0次或多次x+ 1次或多次x{n} 恰好n次x{n,} 至少n次x{m,n} 至少m次,但不能超过n次

3、示例演示:写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。

package com.itheima;/** *需求:写一个正则表达式,可以匹配尾号5连的手机号。规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。 * 例如:18601088888、13912366666 */public class Test{    public static void main(String[] args)    {        telCheck();    }    public  static void telCheck()    {        String tel="18601088888";        String regex="1[3458]\\d{4}(\\d)\\1{4}";  //定义正则表达式的规则        boolean b=tel.matches(regex);   //将字符串tel与regex相匹配        System.out.println(tel+"输入格式为:"+b);    }}

二、 正则表达式的常见功能:

1、 匹配:String matches方法。用于匹配整个字符串,只要有益处不符合规则,就匹配结束,返回false.

package com.zhengzedemo;/**需求:演示正则表达式的匹配功能 * @param args */public class PiPei {    public static void main(String[] args) {        method();    }    public static void method()    {        String str="shan4";        String regex="[a-z]{4}\\d?";        boolean b=str.matches(regex);        System.out.println(b);    }}

2、 切割:String split方法
1)切割符为多个空格

package com.zhengzedemo;/**需求:演示正则表达式的切割功能 * @param args */public class QiGe {    public static void main(String[] args) {        split_1();    }    public static void split_1()    {        String str="shanwenling  qige   xiaomei  lisisi";//字符串里面的空格不确定个数        String reg=" +";//+代表一个或多个,在这里表示空格是一个或多个        String[] arr=str.split(reg);        for(String s:arr)         {            System.out.println(s);        }    }}

2)切割符为.

public static void split_2()       {        String str="shanwenling.qige.xiaomei.lisisi";        String reg="\\.";//因为.是一个任意字符,\.表示一个转义字符,所以要想用.来切割只能是\\.        String[] names=str.split(reg);        for(String name:names)         {            System.out.println(name);        }    }

3)为了可以让规则的结构被重用,可以将规则封装成一个组。用()完成。组的出现都有编号,从1开始,想要使用已有的组可以通过\n(n就是组的编号)的形式来获取。
例如;String reg=”((A)(B))”;
第一组:((A)(B))
第二组:(A)
第三组:(B)
第0组是整个字符串
总结:规则中有几对小括号,就有几组

3、 替换:String replaceAll方法

package com.zhengzedemo;/**需求:1、将字符串中的叠词替换成# *     2、将字符串中的叠词替换成单个字符 * @param args */public class TiHuan {    public static void main(String[] args) {        String str="aggjbkkcwetrrpqq";        String reg="(.)\\1";//这个规则用组的形式表示一个叠词        method_1(str,reg,"");        method_2(str,reg,"");    }    //将字符串中的叠词替换成#    public static void method_1(String str,String reg,String newStr)    {               newStr=str.replaceAll( reg, "#");        System.out.println(newStr);         }    //将字符串中的叠词替换成单个字符    public static void method_2(String str,String reg,String newStr)    {               newStr=str.replaceAll( reg, "$1");//$1表示获取前面规则中组的内容        System.out.println(newStr);         }}

4、 获取:将字符串中符合规则的子串取出
操作步骤:

 1)将正则表达式封装成对象 2)让正则对象和要操作的字符串相关联 3)关联后,获取正则匹配引擎 4)通过引擎对符合规则的子串进行操作,比如取出。

示例演示:

package com.zhengzedemo;import java.util.regex.Matcher;import java.util.regex.Pattern;/**需求:获取字符串中三个字母组成的单词 * @param args */public class HuoQu {    public static void main(String[] args) {        method();    }    public  static  void  method()    {        String str="xiang zhe hei ma qian jin";        String reg="\\b[a-z]{3}\\b";        //将正则表达式封装成对象        Pattern  pt=Pattern.compile(reg);         //让正则对象和要操作的字符串相关联        Matcher m=pt.matcher(str);        //关联后,获取正则匹配引擎        while(m.find())//将规则作用在字符串上,并进行符合规则的查找        {System.out.println(m.group());}//获取匹配后的结果    }}

三、 网页爬虫(类似于蜘蛛)

示例演示:

package com.zhengzedemo;import java.io.BufferedReader;import java.io.FileReader;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;/**演示网页爬虫的功能: * 1、获取指定文档中的邮箱地址 * 2、获取网页中的邮箱地址 * @param args */public class PaChong {    public static void main(String[] args) throws IOException {        method_1();    }    //获取指定文档中的邮箱地址    public static void method_1() throws IOException    {        BufferedReader bufr=new BufferedReader(new FileReader("D:\\a.txt"));//读取指定的文档        String line=null;        String mailReg="\\w+@\\w+(\\.\\w+)+";//定义正则规则        Pattern p=Pattern.compile(mailReg);//将正则表达式封装成对象        while((line=bufr.readLine())!=null) //读取文档中的数据        {            Matcher m=p.matcher(line);//让正则对象和要操作的字符串相匹配            while(m.find())  //将规则作用在字符串上,并进行符合规则的查找            {                System.out.println(m.group());//获取匹配后的结果            }        }    }    //获取网页中的邮箱地址    public static void method_2() throws IOException    {        URL url=new URL("http://172.18.254.7:8080/myweb/mail.html");        URLConnection conn=url.openConnection();        BufferedReader bufrIn=new BufferedReader(new InputStreamReader(conn.getInputStream()));        String line=null;        String mailReg="\\w+@\\w+(\\.\\w+)+";//定义正则规则        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培训、期待与您交流! ———-

0 0
原创粉丝点击