加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 02:08:28 所属栏目:百科 来源:网络整理
导读:--------------ASP.Net+Android+IOS开发 . .Net培训.-----期待与您交流! -------- 1. 正则表达式的概述和作用。 概述:正则表达式就是专门操作的字符串的, 优点:可以减少代码。简化书写 特点:就是用些特殊的字符来表示代码,更简便。 缺点:对于复杂的正

--------------ASP.Net+Android+IOS开发 . .Net培训.-----期待与您交流! --------

1. 正则表达式的概述和作用。

概述:正则表达式就是专门操作的字符串的,

优点:可以减少代码。简化书写

特点:就是用些特殊的字符来表示代码,更简便。

缺点:对于复杂的正则表达式,阅读性比较差。

2. 匹配—正则表示式

1. 方法

利用的是String类中的matchs(String regx).

2. QQ号码验证

  public class QQ {
  public static void main(String[]args) {
    /**
     * 要求:第一位不能0,长度为5-15位
     */
    Stringqq = "770700715";// qq号码
    StringqqRegx = "[1-9]d{4,14}";// 正则表达式的判定字符串
    if (qq.matches(qqRegx))
      System.out.println("qq:" + qq + "是正确的!");
    else
      System.out.println("qq:" + qq + "是错误的!");
  }
 
}

3. 邮箱验证

public class Email {
  public static void main(String[] args) {
    /**
     * 要求:必须有@符号,有.符号
     *     @符号前面可以是大小写,数字和下划线 (长度3-10)位
     * @符号和.之间可以是大小写和数字。(长度2-3)为最后是以com结尾
     *
     */
    String emali = "770700715@126.com";
    String emailRegx = "w{3,10}@[a-zA-Z0-9]{2,3}.com";
    if (emali.matches(emailRegx))
      System.out.println("邮箱正确");
    else
      System.out.println("邮箱错误");
  }
}


注意点:对于w表示的是【a-zA-Z_0-9】,因为会被转义的,所以必须要写成w

同理,在字符串中要是有点(.)的话,那么要写成(.)


4. 中文名字验证


public class Name {
  public static void main(String[] args) {
    /**
     * 要求:名字是汉字的话,那么是2-3个汉字
     *      名字要是字符的话,那么就是6-12位
     */
    String nameRegx="([u4E00-u9FA5]{2,3})||([A-Za-z]{6,12})";
        String name="李四";
        if(name.matches(nameRegx))
        System.out.println("名字正确");
        else
        System.out.println("名字不正确");
  }
}


3. 分割—正则表达式

1. 分割含有转义符号的字符串


 public class Spit {
  public static void main(String[] args) {
    /**
     * C:ab123.txt 将前面的路径按照      分割
     * 因为要把其分装到字符串("C:ab123.txt")中,a会把其转义,所以必须这样写"C:ab123.txt"
     * 因为还要按照分割出来也要把分割规则封装成字符串,所以要使用""
     * 因为"C:ab123.txt"中都是两个所以要增加一个双,即""
     */
      spitString("C:ab123.txt","\");
      
  }
  public static void spitString(String str,String regex){
    String [] ss=str.split(regex);
    for(String n: ss)
      System.out.println(n);
  }
}

2. 利用组来分割

组:就是把分割规则的结果还重复使用,使用()进行划分,那么就使用组,例如叠词。组还分号,从1开始分组,记忆小技巧:有几个括号就分为几个组,从左边开始数左括号,第一个左括号就是第一组,以此类推.



public class Spit {
  public static void main(String[] args) {
      /*
       * 按照叠词进行分割,那么就是使用组
       * 在正则表达式中。   .表示任意字符,(.)1表示第二个位置的和第一个位置的相同,1
       * 因为要封装到字符串中,1会呗转义,所以要"(.)1"
       * 要是是多个相同的话,那么就"(.)1+"
       */
      spitString("1235ddd56ssd11de","(.)1+");
  }
  public static void spitString(String str,String regex){
    String [] ss=str.split(regex);
    for(String n: ss)
      System.out.println(n);
  }
}


3.转义和组的结构图

4. 获取—正则表示式

步骤:

1. 将正则表达式封装成对象。

2. 将正则表达式和匹配的字符串关联起来

3. 获取字符串的匹配器

4. 通过匹配器引擎对字符串进行操作,例如:获取

注意:其实String类中的替换,匹配都是Pattern和Matcher综合运用,最后被String类封装了,操作就简单了,但是String类中还有没有在Matcher类中没有封装的方法,例如:获取。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class find {
  public static void main(String[] args) {
    String str="123 56254855 452 1 56 458";//字符串
    String regex="bd{3}b";//表示连续三个数字
    // d{3}匹配规则   b表示的单词边界
    /*将正则表达式封装成对象*/
    Pattern pat=Pattern.compile(regex);
    /*将正则表达式和字符串关联起来,获得匹配器*/
       Matcher matcher= pat.matcher(str);
       while(matcher.find()){//开始匹配
       System.out.println(matcher.group());//获取匹配的内容
       }
  }
}


注意:在获取的时候,必须先去匹配,然后再去获取,匹配的时候,要注意匹配索引的变化。(start()和 end())

5. 替代—正则表达式

public class Replay {
  public static void main(String[] args) {
    /**
     * 将字符串中连续两个以上的数字替换成成#号
     */
    replayDemo("123ddd6ddf41y2y1d","d{2,}","#");
    /**
     * 将字符串中的叠词用一个字符来替换,就用到了组,其中$1表示的是组中的第一组
     */
    replayDemo("a1113dfgkkksppd","(.)1+","$1");
  }
  public static void replayDemo(String str,String regex,String s){
    str=str.replaceAll(regex,s);
    System.out.println(str);
  }
}


6. 网页爬虫—正则表达式

就是读取 文件的内容或者是一个网上的网页内容,从其中找出你想要的内容,例如:邮箱地址,下面就是介绍获取邮箱的地址。

步骤:

1.获取读取文件的流,

2.获取正则表达式的匹配器

3.然后开始读取文件,一行一行的读取,在循环读取的时候,每一行都要与匹配器匹配

4.然后把匹配的内容读取出来后,写入到另一个文件中。

5.最后关闭流。


读取文件的--爬虫

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class FindEmail {
  public static void main(String[] args) throws Exception {
    File file=new File("F:mail.txt");
        BufferedReader buf=new BufferedReader(new FileReader(file));//读文件流
      String regex="w+@[a-zA-Z0-9]+(.[a-zA-Z]+){1,3}";
      Pattern p=Pattern.compile(regex);
      BufferedWriter writer=new BufferedWriter(new FileWriter("F:newMail.txt"));//写文件流
      String line=null;
      while((line=buf.readLine())!=null){//读取文件
       Matcher matcher=p.matcher(line);
       while(matcher.find()){//匹配
          /*将获取的邮箱名写到另一个文件中*/
        writer.write(matcher.group());//获取
        writer.newLine();//换行
        writer.flush();//刷新
       }
        
      }
      writer.close();
      buf.close();
  }
 
}


读取网上网页的上的邮箱地址--爬虫

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
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;
 
public class FindEmaliByWangye {
  public static void main(String[] args) throws IOException {
    URL url = new URL("http://localhost:8088/android/index.jsp");
    URLConnection conn = url.openConnection();
    BufferedReader reader = new BufferedReader(new InputStreamReader(conn
         .getInputStream()));
    String regex = "w+@[a-zA-Z0-9]+(.[a-zA-Z]+){1,3}";
    Pattern p = Pattern.compile(regex);
    String line = null;
    while ((line = reader.readLine()) != null) {// 读取文件
      Matcher matcher = p.matcher(line);
      while (matcher.find()) {// 匹配
         System.out.println(matcher.group());
      }
    }
    reader.close();
  }
}
 


7. 练习---正则表达式


public class regexText {
  public static void main(String[] args) {
    /*将此字符串变成我要学编程*/
    String str = "我我我....我我我....我我我....要要要......要要要......要要要......学...学学学学...编编....程程...";
    str=str.replaceAll(".+","");
    str=str.replaceAll("(.)1+","$1");
        System.out.println(str);
  }
}

结果:我要学编程

----------------------ASP.Net+Android+IOS开发 . .Net培训.-----------期待与您交流! -------------------

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读