JavaSE基础部分--正则表达式

正则表达式

1.正则表达式概述:
正确规则的表达式 规则Java给我们定的。是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
2.正则表达式的组成规则

规则字符在java.util.regex Pattern类中
A:字符
 x 字符 x。举例:'a'表示字符a
 \\ 反斜线字符。
 \n 新行(换行)符 ('\u000A') 
 \r 回车符 ('\u000D')
B:字符类
 [abc] a、b 或 c(简单类) 
 [^abc] 任何字符,除了 a、b 或 c(否定) 
 [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 
 [0-9] 09的字符都包括
C:预定义字符类
 . 任何字符。我的就是.字符本身,怎么表示呢? \.
 \d 数字:[0-9]
 \w 单词字符:[a-zA-Z_0-9]
  在正则表达式里面组成单词的东西必须有这些东西组成
 \s 匹配空格字符 
D:边界匹配器
 ^ 行的开头 
 $ 行的结尾 
 \b 单词边界
  就是不是单词字符的地方。
  举例:hello world?haha;xixi
E:Greedy 数量词 
 X? X,一次或一次也没有 比如""空串 就是没有
 X* X,零次或多次  大于等于1次 都算多次
 X+ X,一次或多次
 X{n} X,恰好 n 次 
 X{n,} X,至少 n 次 
 X{n,m} X,至少 n 次,但是不超过 m 次

3.案例演示

案例1:手机号验证 非正则 与正则两种
public class demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入的你的手机号");
        String phoneNumber = sc.nextLine();
        //正则方式验证
        String regx="[1][3,5,7,8][0-9]{9}";
        boolean flag1=phoneNumber.matches(regx);
        System.out.println(flag1);
        if (flag1) {
            System.out.println("手机号规则正确");
        } else {
            System.out.println("手机号规则错误");
        }
        //非正则方式验证
        boolean flag = checkphoneNumber(phoneNumber);
        
        if (flag) {
            System.out.println("手机号规则正确");
        } else {
            System.out.println("手机号规则错误");
        }
    }
    private static boolean checkphoneNumber(String phoneNumber) {
        boolean flag = false;
        if (phoneNumber.length() == 11 && (phoneNumber.startsWith("13") || phoneNumber.startsWith("15") || phoneNumber.startsWith("17") || phoneNumber.startsWith("18"))) {
            for (int i =2; i < phoneNumber.length(); i++) {
                char ch = phoneNumber.charAt(i);
                if (!Character.isDigit(ch)) {
                    flag = false;
                    break;
                } else {
                    flag = true;
                }
            }
        }
        return flag;
    }
}
案例2:邮箱验证
public class demo1 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入的你的邮箱号:");
        String EmailNumber = sc.nextLine();
        //正则
       /* String regx="[A-Za-z]\\w{5,17}@163\\.com";
        boolean flag=EmailNumber.matches(regx);
        System.out.println(flag);*/
        //非正则
        boolean flag = checkEmailNumber(EmailNumber);
        if (flag) {
            System.out.println("邮箱注册规则正确");
        } else {
            System.out.println("邮箱注册规则错误");
        }
    }
    private static boolean checkEmailNumber(String EmailNumber) {
       boolean flag=false;
       if(EmailNumber.length()>=14&&EmailNumber.length()<=26&&EmailNumber.endsWith("@163.com")){
           String s=EmailNumber.substring(0,EmailNumber.lastIndexOf("@"));
           char ch1 = s.charAt(0);
           for (int i = 1; i < s.length(); i++) {
               char ch = s.charAt(i);
               if(Character.isLetter(ch1)&&(Character.isDigit(ch)||Character.isLetter(ch)||s.contains("_"))){
                   flag=true;
                   break;
               }else{
                   flag=false;
               }
           }
       }
       return flag;
    }
}

4.常见正则规则

通用版的邮箱规则
String emailRegx = "[a-zA-Z]\\w{5,17}@[1-9a-z]{3,10}\\.(com|cn|net|org)";
校验中文的正则。
String regx="[\\u4e00-\\u9fa5]{2,12}";
校验身份证的正则
String regx="[1-9]\d{5}(18|19|20|(3\d))\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]"
车牌号码的正则
String car="[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}";

5.正则表达式的判断功能

public boolean matches(String regex)  匹配正则
应用:
String regx = "[1-9][0-9]{4,14}";
boolean b = "21332154012".matches(regx);
System.out.println(b);//结果为true

6.正则表达式的分割功能

public String[] split(String regex) 通过匹配正则进行分割
应用举例:
public class MyTest {
    public static void main(String[] args) {
        String names="张三=李四=王五";      
        //根据正则来切割这个字符串,返回的是一个字符串数组。
        String[] strings = names.split("=");
        System.out.println(strings[0]);//张三
        System.out.println(strings[1]);//李四
        System.out.println(strings[2]);//王五
        System.out.println("================================");
        String names2 = "张三assdfa=12542242assadfafasdf2411李四asdfdadsf25244=asdfasdf25411王五"; //
        String[] arr = names2.split("[a-z=0-9]+");
        System.out.println(arr[0]);//张三
        System.out.println(arr[1]);//李四
        System.out.println(arr[2]);//王五
    }
}
 /*案例演示:
        需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”
        
         * 分析:
 * a: 定义目标字符串"91 27 46 38 50"
 * b: 对这个字符串进行切割,得到的就是一个字符串数组
 * c: 把b中的字符串数组转换成int类型的数组
 * (1): 定义一个int类型的数组,数组的长度就是字符串数组长度
 * (2): 遍历字符串数组,获取每一个元素.将其转换成int类型的数据
 * (3): 把int类型的数据添加到int类型的数组的指定位置
 * d: 排序
 * e: 创建一个StringBuilder对象,用来记录拼接的结果
 * f: 遍历int类型的数组, 将其每一个元素添加到StringBuilder对象中
 * g: 就是把StringBuilder转换成String
 * h: 输出
        */
public class demo3 {
    public static void main(String[] args) {
        String str="91 27 46 38 50";
        String []  arr=str.split("\\s+");
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);
        int[] arr1 = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
                arr1[i]=Integer.parseInt(arr[i]);//String 类型转换int类型
        }
        System.out.println(Arrays.toString(arr1));
        Arrays.sort(arr1);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < arr1.length; i++) {
            sb.append(arr1[i]).append(" ");
        }
        System.out.println(sb.toString());
    }
}

7.正则表达式的替换功能
String类的功能:public String replaceAll (String regex, String replacement) 根据正则表达式选择替换

public class MyTest3 {
    public static void main(String[] args) {
        String str="225222asdfa你22222222好asdfassdfhahehhasd阿斯顿asdf发放阿asdfasdf斯顿发顺丰啊手动阀dssdfsdfsfd124574544";
        //保留上面字符串中的中文字符
        String str2 = "abc你好abc";
        String s = str2.replace("你好", "");
        System.out.println(s);//abcabc
        //根据正则表达式去替换  将非中文字符都替换掉
        String s1 = str.replaceAll("[^\\u4e00-\\u9fa5]", "");
        System.out.println(s1);//你好阿斯顿发放阿斯顿发顺丰啊手动阀
    }
}

8.Pattern和Matcher的概述
匹配器Matcher 模式器Pattern 两个类
Pattern正则表达式的编译表示形式。
Matcher 通过调用模式的Matcher方法从模式创建匹配器。
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是

Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();

9.正则表达式的获取功能
boolean find ()
尝试查找与该模式匹配的输入序列的下一个子序列。
String group ()
返回由以前匹配操作所匹配的输入子序列。

public class MyTest {
    public static void main(String[] args) {
        //获取下面字符串中 是三个字母组成的单词。
        String str="da jia ting wo shuo, jin tian yao xia yu, bu shang wan zi xi, gao xing bu?";
       String regx="\\b[a-z]{3}\\b";
       Pattern pattern = Pattern.compile(regx);
       Matcher matcher = pattern.matcher(str);
       //先查找后返回
       while (matcher.find()) {
            String s = matcher.group();
            System.out.println(s);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值