美文网首页
正则专题

正则专题

作者: 攻城老狮 | 来源:发表于2021-06-10 15:21 被阅读0次

    1 正则表达式的基本语法

    元字符的功能:限定符;选择匹配符;分组组合和反向引用符;特殊字符;字符匹配符;定位符

    1.1 转义符

    说明:转义符(\\)用于在正则表达式中检索某些特殊字符。例如:匹配 . * + ( ) $ / \ ? [ ] ^ { } 等在正则表达式中有具体含义的字符。

    public class Test01 {
        public static void main(String[] args) {
            String content = "abc$(a.bc(123( )";
            //转义了. 使其单纯匹配.本身,没有其他含义
            String regStr = "\\.";
            Pattern pattern = Pattern.compile(regStr);
            Matcher matcher = pattern.matcher(content);
            while (matcher.find()){
                System.out.println(matcher.group(0));
            }
        }
    }
    

    1.2 字符匹配符

    说明:匹配指定的字符


    image-20210604083139495.png image-20210604083151568.png

    1.3 选择匹配符

    说明:在匹配某个字符串的时候具有选择性的

    image-20210604083408567.png

    1.4 限定符

    说明:用于指定其前面的字符和组合项连续出现多少次

    image-20210604083747388.png image-20210604083800078.png

    1.5 定位符

    说明:规定要匹配的字符串出现的位置

    image-20210604084206567.png

    1.6 分组

    image-20210604084528221.png image-20210604084541063.png

    1.7 分组、捕获和反向引用

    分组:可以用圆括号组成一个比较复杂的匹配模式,一个圆括号的部分可以看作是一个子表达式/一个分组。

    捕获:把正则表达式中子表达式/分组匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用,从左向右,以分组的左括号为标志,第一个出现的分组的组号为1,第二个为2,以此类推。组0代表的是整个正则式。

    反向引用:圆括号内容被捕获后,可以在这个括号后被使用,从而写出一个比较实用的匹配模式,这个称为反向引用,这种引用既可以在正则表达式内部,也可以是在正则表达式外部,内部反向引用\\分组号,外部反向引用 $分组号。

    //匹配两个连续的相同数字:(\\d)\\1
    //匹配五个连续的相同数字:(\\d)\\1{4}
    //匹配个位和千位相同,十位和百位相同的数 5225,1551:(\\d)(\\d)\\2\\1
    
    //把类似 : "我我要学学学学编程 java!",通过正则表达式修改成 "我要学编程java"
    public class Test01 {
        public static void main(String[] args) {
            String content = "我我要学学学学编程 java!";
            String newContent = Pattern.compile("(.)\\1+").matcher(content).replaceAll("$1");
            System.out.println(newContent);
        }
    }
    

    2 正则表达式的常用类

    2.1 Pattern类

    Pattern对象是正则表达式对象。Pattern类没有公共构造方法,要创建一个Pattern对象,需要调用其公共静态方法,它返回一个Pattern对象。该方法接受一个正则表达式作为第一个参数。

    Pattern pattern = Pattern.compile(regStr);
    
    //matches() 方法,用于整体匹配, 在验证输入的字符串是否满足条件使用
    public class Test01 {
        public static void main(String[] args) {
            String content = "abc$(a.bc(123( )";
            //该正则可以匹配全部content的字符串,故为true
            String regStr = "^abc.*";
            boolean matches = Pattern.matches(regStr, content);
            System.out.println(matches);
        }
    }
    

    2.2 Matcher类

    Matcher对象是对输入字符串进行解析和匹配的引擎。与Pattern类一样,Matcher也没有公共构造方法,需要调用Pattern对象的matcher方法来获得一个Matcher对象

    public class Test01 {
        public static void main(String[] args) {
            String content = "abc$(a.bc(123( )";
            String regStr = "bc";
    
            Pattern pattern = Pattern.compile(regStr);
            Matcher matcher = pattern.matcher(content);
            while (matcher.find()) {
                //1.start和end方法获取匹配字符串在源字符串的开始和结尾的索引
                System.out.println("start: " + matcher.start() + ",end: " + matcher.end());
                System.out.println(content.substring(matcher.start(), matcher.end()));
            }
    
            //2.替换匹配的字符串为指定的字符串
            String newContent = matcher.replaceAll("hello");
            System.out.println(newContent);
    
            regStr = "^abc.*";
            pattern = Pattern.compile(regStr);
            matcher = pattern.matcher(content);
            //3.整体匹配方法,常用于校验某个字符串是否满足某个规则
            boolean matches = matcher.matches();
            System.out.println(matches);
        }
    }
    

    3 String类中使用正则表达式

    public class Test01 {
        public static void main(String[] args) {
            String content = "Hello1.3,aaaaa&Hello1.4";
            //1.替换功能
            String newContent = content.replaceAll("Hello1.3|Hello1.4", "nihao");
            System.out.println(newContent);
            //2.判断功能
            boolean matches = content.matches("^Hello.*$");
            System.out.println(matches);
            //3.分割功能
            String[] split = content.split(",|&");
            for (String s : split) {
                System.out.println(s);
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:正则专题

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