黑马程序员---正则表达式笔记(匹配,切割,替换,获取)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1.正则表达式:符合一定规则的表达式。

        作用:用于专门操作字符串
        特点:用于一些特定的符号来表示一些代码操作,这样就简化书写
        好处:可以简化对字符串的复杂操作
        弊端:符号定义越多,正则越长,阅读性越差。
    具体操作功能:
        1.匹配:String matches方法,用规则匹配整个字符串,只要有一处不符合规则,匹配就结束
        2.切割:split();
        3.替换:replaceAll();

        4.获取:Pattern p = Pattern.compile(String regex);

                       Matcher m = p.matcher(String str);

                      if(m.find()){m.group()}

2.示例:
    1.按.将字符串分割开
         splitDemo("zhangsan.lisi.wangwu","\\.");
    2.单个\表示转义,\\则表示单个\。所以\\的正则就为\\\\
        splitDemo("c:\\haha\\a.txt","\\\\");
    3. 叠词分割
        splitDemo("zdafafffqw8888vgkklmn","(.)\\1+");
    4.将数字替换成#
        replaceAllDemo("fasfas424323fasf322aq2","\\d+","#");
    5.将重叠的字符换成单个字符
        replaceAllDemo("dadadddsavvbbrrfffflllloo","(.)\\1+","$1");

       

3.正则表达式的获取功能。
import java.util.regex.*;
class RegexDemo2
{
    public static void main(String[] args)
    {
        String str = "hello love world your";
        String reg = "\\b\\w{4}\\b";//\\b单词边界
        //1.将正则表达式封装成对象
        Pattern p = Pattern.compile(reg);
        //2.让正则对象和要作用的字符串相关联,并获取匹配器对象
        Matcher m = p.matcher(str);
        //3.进行符合规则的子串的查找
        while(m.find())
        {
            //获取匹配后的结果
            System.out.println(m.group());    
        }
    }
}



4.正则的使用思路?到底用哪种使用方式?
        1.如果只想知道该字符串是否正确,使用匹配
        2.如果想要将原字符串变成新的字符串,使用替换。
        3.想要按照自己的方式将一个字符串变成多个字符串,用切割。
                    获取规则以外的字符串。
        4.想要拿到符合规则的子字符串,用获取。获取符合规则的子串。
示例:
class RegexTest
{
    public static void main(String[] args)
    {
        String str = "我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.程程...程...程";
        str = str.replaceAll("\\.","");
        str = str.replaceAll("(.)\\1+","$1");
        System.out.println(str);
    }
}

5.正则表达式的3中使用示例
import java.util.*;
class RegexTest
{
    public static void main(String[] args)
    {
        //test_2();
        test_mail();
    }
    
    //此题锻炼使用正则的思路
    public static void test_1()
    {
        String str = "我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.程程...程...程";
        str = str.replaceAll("\\.","");
        str = str.replaceAll("(.)\\1+","$1");
        System.out.println(str);    
    }
    
    
    /*
    192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
    将ip地址进行地址段顺序的排序。

    还按照字符串自然顺序,只要让它们每一段都是3位即可。
    1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。
    2,将每一段只保留3位。这样,所有的ip地址都是每一段3位。
    */
    public static void test_2()
    {
            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");
            ip = ip.replaceAll("0*(\\d{3})","$1");
            String[] str = ip.split(" ");
            for(String s:str)
            {
                System.out.println(s);
            }
            System.out.println("-------------------------------------");
            /*排序方式一
            Arrays.sort(str);
            for(String s:str)
            {
                System.out.println(s);
            }
            */
            
            
            //排序方式二
            TreeSet<String> ts = new TreeSet<String>();
            for(String s:str)
            {
                ts.add(s);
            }
            for(String s:ts)
            {
                System.out.println(s);
            }
    }
    
    //判断邮件是否符合格式
    public static void test_mail()
    {
        String mail = "abc12@sina.com";    
        //数字或者字母出现2-10次@数字或者字母出现一次或者多次.com .cn出现一次或者不出现
        boolean b = mail.matches("\\w{2,10}@\\w+.com(.cn)?");
        System.out.println(b);
    }
}



6.网页爬虫,检索出邮箱名.(使用URL,IO)
import java.net.*;
import java.io.*;
import java.util.regex.*;
class Pachong
{
    public static void main(String[] args) throws IOException
    {
        //获取指向互联网的指针
        URL url = new URL("http://localhost:8080/myweb/mail.html");
        //连接互联网
        URLConnection urlc = url.openConnection();
        //获取本网页的输入流
        BufferedReader bufr = new BufferedReader(new InputStreamReader(urlc.getInputStream()));  
        String temp = null;
        //邮件的正则表达
        String reg = "\\w+@\\w+\\.com(\\.cn)?";
        Pattern p = Pattern.compile(reg);
        Matcher m = null;
        while((temp=bufr.readLine())!=null)
        {
            m = p.matcher(temp);
            if(m.find())
            {
                System.out.println(m.group());    
            }
        }
        bufr.close();    
    }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值