Skip to content

第二十七章:正则表达式


第一题

alt text

java
public class Main {
    public static void main(String[] args) {
        String content = "jackson@qq.com";
        /*
            1. 使用 matches 方法,最好加上起始符和结束符
            2. @ 固定
            3. @前面的内容:可能是 大小写字母、数字、下划线(用\\w),还有-
            4. @后面的内容:可能是二级域名,即一个到多个字母,考虑大小写(用[a-zA-Z])
            5. + 表示一个到多个
         */
        String regStr = "^[\\w-]+@([a-zA-Z]+\\.)+[a-zA-Z]+$";
        if (content.matches(regStr)){
            System.out.println("匹配成功");
        }else {
            System.out.println("匹配失败");
        }
    }
}

第二题

alt text

java
public class Main {
    public static void main(String[] args) {
        String content = "-0.89";
        String regStr = "^[+-]?([1-9]\\d*|0)(\\.\\d+)?$";
        if (content.matches(regStr)){
            System.out.println("匹配成功,是整数或者小数");
        }else {
            System.out.println("匹配失败");
        }
    }
}

第三题

alt text

本题的核心就是分组

java
public class Main {
    public static void main(String[] args) {
        String content = "http://www.sohu.com:8080/abc/xxx/yyy/////inde@#$%x.htm";
        // 因为正则表达式是根据要求来编写的,所以,如果需求需要的话,可以改进。
        String regStr = "^([a-zA-Z]+)://([a-zA-Z.]+):(\\d+)[\\w-/]*/([\\w.@#$%]+)$";
        Pattern pattern = Pattern.compile(regStr);
        Matcher matcher = pattern.matcher(content);
        if (matcher.matches()) {
            System.out.println("整体匹配=" + matcher.group(0));
            System.out.println("协议: " + matcher.group(1));
            System.out.println("域名: " + matcher.group(2));
            System.out.println("端口: " + matcher.group(3));
            System.out.println("文件: " + matcher.group(4));
        } else {
            System.out.println("没有匹配成功");
        }
    }
}