Java小记——正则表达式

目录

正则表达式概念

正则表达式的组成规则

正则表达式的匹配使用格式

正则表达式的替换功能

正则表达式的分割功能

正则表达式的获取功能 Pattern和Matcher类


正则表达式概念

是指正确规则的表达式,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。

正则表达式的组成规则

String regx = "a"; //最简单的正则 匹配a这个字符

regx = "[a,b,c]";//[] 是我列表中的某一个

regx = "[a,b,c,A,B,C,0,1,2,3]";

regx = "[123456789]";

regx = "[a-z]";

regx = "[A-Z]";

regx = "[0-9]";

regx = "[a-zA-Z0-9]";

regx = "[^0-9]"; //不是数字  ^取反

regx = "."; //匹配单个任意字符

regx = "..";

regx = "\\."; //\\转义字符  \\. 只代表.本身

regx = "a|b"; // | 或

regx = "\\|";// \\转义字符

regx = "\\d";  //\\d 和他的意思[0-9] 一样

regx = "\\D";  //\\D 和他的意思[^0-9] 一样

regx = "\\w";// 跟[a-zA-Z_0-9] 意思一样

regx = "\\W";// 跟[^a-zA-Z_0-9] 意思一样

regx = "\\s"; //匹配空格字符

regx = "\\S";//不是空格

regx = "[0-9a-zA-Z]+"; //+ 一次或多次

regx = "[a-z]*"; //零次或多次  大于等于1次 都算多次

regx = "[A-Z]?"; //零次或1次

regx = "[0-9]{5,}"; //至少5次

regx = "[0-9]{5,15}"; //大于等于5 小于等于15

regx = "[0-9]{11}"; //正好11次

[\u4e00 -\u9fa5] //匹配中文

正则表达式的匹配使用格式

需要匹配的字符串s.matches(正则表达式regex)

举例,对qq号的匹配

规则:1. 5-15位

           2.不能以0开头

import java.util.Scanner;

public class MyTest {
    public static void main(String[] args) {
        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入正确的qq号");
            String s = sc.next();
            boolean flag = checkQQNumber(s);
            if (flag) {
                System.out.println("规则正确");
                break;
            } else {
                System.out.println("规则错误");
            }
        }

    }

    private static boolean checkQQNumber(String s) {
        String str = "[1-9][0-9]{4-14}";
        boolean flag = s.matches(str);
        return flag;
    }


}

正则表达式的替换功能

例有一字符串

String s = "张三dadasdasdsa512李四54546sdsadswdwfgz王五5898hhyhxx";

获取张三-李四-王五

String str = s.replaceAll("[\\w]+","-");

正则表达式的分割功能

得到一个字符串数组

有一字符串 "91    27    46   38    50 101 1 100 2 200   30"

把它变成 "1 2 27 30 38 46 50 91 100 101 200"

public class MyTest {
    public static void main(String[] args) {
        String str = "91    27    46   38    50 101 1 100 2 200   30";
        String[] s = str.split("\\s+");
        int[] arr = new int[s.length];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=Integer.parseInt(s[i]);
        }
        Arrays.sort(arr);
        StringBuilder b = new StringBuilder();
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                b.append(arr[i]);
            } else {
                b.append(arr[i]).append(" ");
            }

        }

        System.out.println(b.toString());

    }
}

正则表达式的获取功能 Pattern和Matcher类

//Pattern 模式器,用来封装一个正则表达式
Pattern p = Pattern.compile("a*b");
//通过匹配器获取一个模式器,并传入待匹配数据
Matcher m = p.matcher("aaaaab");
//使用匹配器中的matches() 看待匹配数据,是否符合正则。
boolean b = m.matches();
System.out.println(b);


//如果你仅仅只是看一个数据是否符合正则,那就你用字符串中的matches()方法
boolean b1 = "aaaaab".matches("a*b");
System.out.println(b1);

提取下面三个字符的单词

da jia ting wo shuo,jin tian yao xia yu,bu shang wan zi xi,gao xing bu?

常规做法

String str = "da jia ting wo shuo, jin tian yao xia yu, bu shang wan zi xi, gao xing bu?";
        //1.替换掉逗号,问号
        String s = str.replace(",", "").replace("?", "");
        System.out.println(s);
        //2.切割字符串
        String[] strArr = s.split("\\s+");
        //3.遍历数组,判断元素长度=3的再次使用sb 再次拼接成字符串
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < strArr.length; i++) {
            if (strArr[i].length() == 3) {
                sb.append(strArr[i]).append(" ");
            }
        }
        String s1 = sb.toString().trim();
        System.out.println(s1);

        //4.再次截取我刚才拼接的字符串。
        String[] arr = s1.split("\\s+");

用Pattern和Matcher做

要用到find()和group()方法

先 find () 后 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 regex = "\\b[a-z]{3}\\b";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        while (m.find()) {
            String group = m.group();
            System.out.println(group);
        }
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jmh-Ethereal

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值