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

时间:2021-05-12 05:34:38

------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();
}
}