美文网首页
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);
          }
     }

相关文章

  • 正则表达式

    一、一些特殊的正则表达式: 1、邮箱正则表达式 "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+...

  • 2018-08-29第十八天

    2018-08-29正则表达式if控制器压力测试 正则表达式: 取值范围:[0-9]:数字0到9 \d也可以表示[...

  • 解18位身份证正则表达式

    自己初学正则表达式,写了一个18位正则表达式如下: ^[1-9]\d{5}(18|19|2([0-9]))\d{2...

  • scala学习笔记(9-12)

    目录 9.文件和正则表达式 10.特质 11.操作符 12.高阶函数 9.文件和正则表达式 Source.from...

  • 2018-08-29

    DAY16正则表达式if控制器压力测试 正则表达式: 1.取值范围:[0-9]:数字0到9 \d也可以表示[a-z...

  • javascript正则

    原生JavaScript常用的正则表达式 //正整数 /^[0-9]*[1-9][0-9]*$/; //负整数 /...

  • 常用正则表达式

    常用正则表达式 “^\d+$” //非负整数(正整数 + 0) “^[0-9]*[1-9][0-9]*$” //正...

  • 常用正则表达式

    常用正则表达式"^/d+$"//非负整数(正整数 + 0)"^[0-9][1-9][0-9]$"//正整数"^((...

  • 《mysql必知必会》读书实战笔记9-正则过滤文本

    第9章 用正则表达式搜索 1、正则表达式介绍 正则表达式是用来匹配某种文本模式的特殊字符串(字符集合),由正则表达...

  • 时间日期正则表达式

    //日期的正则表达式var reg = /^[1-9]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|...

网友评论

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

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