美文网首页
9、正则表达式

9、正则表达式

作者: 浮生若梦OvO | 来源:发表于2019-06-20 22:06 被阅读0次

    注:
    第0组(d(a(b))(c))
    第1组 d(a(b))(c)
    第2组 a(b)
    第3组 b

    一、正则表达式的概述和简单使用

    • 概述: 是指一个用来描述或者匹配一系列符合某个语法规则的单个字符串,其实就是一种规则,有自己特殊的应用,(简单来讲,就是符合某种规则的字符串)
    • String类的新方法
      public boolean matchs( String regex );// 判断该字符串是否匹配给定的正则表达式
      举例: boolean flag = qq.matchs( regex );// 就是判断qq这个字符串和给定的规则符不符合

    二、正则表达式的规则字符

    学习pattern类,了解规则:

    • 字符:
      n :字符n,任意字符代表自己本身,当字符单独存在时。
      \ : 反斜线字符,代表一个\,第一个是转义字符。
      \r : 回车
      \n:换行
    • 字符类
      [ abc ] a,b,c字符出现一次,写在中括号里表示需要匹配的指定字符
      [ ^abc ] 可以是任意字符,但除了abc,表示匹配任意字符都可以除了中括号内的字符
      [ a-zA-Z] a到z 或A到Z,两头的字母包括在内,表示所有英文字母任意一个出现一次
      [ 0-9 ] 任意的数字出现一次
    • 预定义字符类
      . 任意的字符,单独的.代表任意字符
      \d 数字[ 0-9 ] ,代表0-9.取代了[ 0-9 ]
      \w 单词字符,[a-zA-Z_0-9] ,英文、数字及下划线才叫单词字符
    • 边界匹配器
      ^ 行的开头,以什么开头
      $ 行的结尾 ,以什么结尾
      \b 单词边界,也就是说这里出现的不能是单次字符
      举例: abc hello world?haha
    • Greedy 数量词
      X?X 一次货一次也没有
      X*X 零次或多次
      X+X 一次或多次
      X{ n } 恰好n次
      X{ n, } 至少n次
      X{ n, m } 至少n次,但不超过m次

    三、正则表达式的功能

    • 判断功能
      String类中public boolean matches(String regex)
      判断该字符串 是否符合给定的正则表达式
      举例:
      boolean flag = qq.matches(regex);
      判断qq这个字符串是否符合我们给定的规则regex
    • 切割功能
      使用String类的split(regex)方法
      a 切割单个空格的规则 ,“空格”;
      b 切割多个空格的规则, “空格+”;
      c 切割路径的规则, String str=“E:\java\20150403”,将\\作为字符串进spilt中;
      d 切割叠词的规则,(.)\1+;
      注:
      (d(a(b))(c))第4组 c
    • 替换功能
      使用的是String类中的public String replaceAll(String regex,String replacement)
      用给定的字符串替换符合正则规则的字符串
      replacement这个地方可以通过$符来引用调用这个方法字符串中组的内容
    String s = "我...我我...我...我要学...学学...学学...编程" ;
               String ss = s.replaceAll( "\\.", "");
               String sss = ss.replaceAll( "(.)\\1+", "$1");
               System. out.println( sss);
    
    • 获取功能
      //把正则表达式编译成模式对象
      Pattern p = Pattern.compile("a*b");
      //通过模式对象调用匹配器方法,得到匹配器对象
      Matcher m = p.matcher("aaaaab");
      //通过匹配对象使用Matcher类中public boolean find()方法,尝试查找与该模式匹配的输入序列的下一个子序列(理解,类似于在大串种查找小串)
      boolean b=m.find( );
      //再使用Matcher类中的public String group( );返回由以前匹配操作所匹配的操作子序列。

    举例:

    public static void main(String[] args) {
              // // 把正则表达式编译成模式对象
              // Pattern p = Pattern.compile("a*b");
              // // 通过模式对象调用匹配方法获取到匹配器对象
              // Matcher m = p.matcher("aaaaab");
              // // 调动匹配器对象的判断功能
              // boolean b = m.matches();
              // System.out.println(b);
    
              // 这道题目我们还可以通过判断功能
              // String regex = "a*b";
              // String str = "aaaaab";
              // boolean flag = str.matches(regex);
              // System.out.println(flag);
    
              // 定义规则
              String regex = "\\b[a-z]{3}\\b";
    
              String str = "da jia zhu yi le, ming tian bu fang jia, xie xie!";
              // 想要获取3个字符组成的单词
    
              Pattern p = Pattern.compile(regex);
              Matcher m = p.matcher(str);
              // public boolean find()
              // 判断看是否存在有满足条件的子串
              // boolean flag = m.find();
              // System.out.println(flag);
              // //获取子串
              // //public String group()
              // String s = m.group();
              // System.out.println(s);
              while(m.find()){
                   System.out.println(m.group());
              }
         }
    

    四、综合练习

    获取文件中的邮箱
    步骤:
    a:创建字符高效流读取数据
    b:把读取到的每一行数据进行查找
    c:把符合正则条件的字符串储存到集合中
    d:遍历集合

    public static void main(String[] args) throws IOException {
              // 通过字符输入流读取数据。
              BufferedReader br = new BufferedReader(new FileReader("mail.txt"));
              // 创建一个集合
              ArrayList<String> array = new ArrayList<String>();
    
              // 定义邮箱规则
              String regex = "\\w+@\\w{2,8}(\\.\\w{2,3})+";
    
              String line = null;
              while ((line = br.readLine()) != null) {
                   Pattern p = Pattern.compile(regex);
                   Matcher m = p.matcher(line);
                   while (m.find()) {
                        array.add(m.group());
                   }
              }
    
              // 遍历集合。
              for (String s : array) {
                   System.out.println(s);
              }
         }
    

    相关文章

      网友评论

          本文标题:9、正则表达式

          本文链接:https://www.haomeiwen.com/subject/wzijqctx.html