正则表达式的概述和简单使用

正则表达式的概述和简单使用

概述:

是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。

案例演示

需求:校验qq号码.
1:要求必须是5-15位数字
2:0不能开头

a:非正则表达式实现
b:正则表达式实现


public static void main(String[] args) {
anner sc = new Scanner(System.in);
    System.out.println("请输入一个QQ号码");
    String qqNum = sc.nextLine();
    //校验QQ号的组成规则
    // boolean b = checkQQNum(qqNum);
    boolean b = checkQQNumUseRegex(qqNum);
    if (b) {
        System.out.println("QQ规则正确");
    } else {
        System.out.println("QQ号不符合规则");
    }


}

private static boolean checkQQNumUseRegex(String qqNum) {
    //定义一个正则表达式
    String regex = "[1-9][0-9]{4,14}";
    return qqNum.matches(regex);


}

private static boolean checkQQNum(String qqNum) {
    //    1:要求必须是5-15位数字
    //    2:0不能开头
    //定义一个标记
    boolean flag = false;
    //先判断长度
    if (qqNum.length() >= 5 && qqNum.length() <= 15 && !qqNum.startsWith("0")) {
        //校验每个字符都是数字
        for (int i = 0; i < qqNum.length(); i++) {
            char ch = qqNum.charAt(i);
            //if(ch>='0'&&ch<='9'){
            //    flag=true;
            //}else{
            //    flag=false;
            //    break;
            //}
            //static boolean isDigit ( char ch)
            //确定指定字符是否为数字。
            if (Character.isDigit(ch)) {
                flag = true;
            } else {
                flag = false;
                break;
            }

        }
    } else {
        flag = false;
    }
    return flag;

}
正则表达式的组成规则
  1. 字符
  • x 字符 x。举例:'a’表示字符a
  • \ 反斜线字符。
  • \n 新行(换行)符 (’\u000A’)
  • \r 回车符 (’\u000D’)
  1. 字符类
  • [abc] a、b 或 c(简单类)
  • [^abc] 任何字符,除了 a、b 或 c(否定)
  • [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围)
  • [0-9] 0到9的字符都包括
  1. 预定义字符类
  • 任何字符。我的就是.字符本身,怎么表示呢? .
  • \d 数字:[0-9]
  • \w 单词字符:[a-zA-Z_0-9]
    在正则表达式里面组成单词的东西必须有这些东西组成
  1. 边界匹配器
  • ^ 行的开头
  • $ 行的结尾
  • \b 单词边界
    就是不是单词字符的地方。
    举例:hello world?haha;xixi
  1. Greedy 数量词
  • X? X,一次或一次也没有 比如""空串 就是没有
  • X* X,零次或多次 大于等于1次 都算多次
  • X+ X,一次或多次
  • X{n} X,恰好 n 次
  • X{n,} X,至少 n 次
  • X{n,m} X,至少 n 次,但是不超过 m 次
  1. 正则表达式的判断功能
    String类的功能:public boolean matches(String regex)
public static void main(String[] args) {
 	regx="[abc]";//允许出现中括号中的字符的某一个
	regx="[a-z]";
	regx="[ABCDEFDGDGDGDG0998888283823828323]";
	regx="[a-zA-Z0-9]";
	regx="[^0-9]"; //不是列表中的字符
	// . 可以统配单个任意字符
	regx="..";
	regx="\\."; // \\ 转义字符
	regx="\\|"; //
	regx="\\d"; // \d 跟[0-9] 意思相同
	regx="\\w"; // \w 跟[a-z_A-Z0-9] 意思相同
    String regx="[0-9]+"; //可以出现一个或者多个
    regx="[a-z]?";//出现一次,或一次也不要出现  "" 空串就是没有出现
    regx="[A-Z0-9]*";//零次或多次 一次也算多次
    regx="[a-z]{3}"; // 恰好几次
    regx="[0-9]{3,}";// 至少几次
    regx="[a-z0-9A-Z]{6,12}"; //等于等于 6 小于等12

    String regex = "[1-9][0-9]{4,14}";

    boolean b = "12300abc".matches(regx);//检验字符串是否符合定义的规则
    System.out.println(b);
}
正则表达式的案例演示
  • 正则表达式的分割功能 split()方法
    String类的功能:public String[] split(String regex)
    代码演示
public static void main(String[] args) {
    //A:
    //正则表达式的分割功能 split () 方法
    //String类的功能:public String[] split (String regex)
    String str="aaa-bbb-ccc";
    String[] strArr = str.split("-");

    System.out.println(Arrays.toString(strArr));

    String str2 = "aaa-1232424bbb-7890ccc";

    String[] split = str2.split("[0-9\\-]+");
    System.out.println(Arrays.toString(split));

}

  • 需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”

public static void main(String[] args) {
    //A:
    //案例演示:
    //需求:我有如下一个字符串:”91 27 46 38 50”,请写代码实现最终输出结果是:”27 38 46 50 91”

    String str = "91 27 46 38 50";
    //-分析:
    //-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:输出


    //"27 38 46 50 91";
    String[] strings = str.split(" ");
    //遍历字符串数组,取出元素,装到一个int数组里面去
    int[] arr = new int[strings.length];
    for (int i = 0; i < strings.length; i++) {
        arr[i] = Integer.parseInt(strings[i]);
    }

    //排序
    Arrays.sort(arr);

    // System.out.println(Arrays.toString(arr));
    //遍历int数组拼串
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < arr.length; i++) {
        sb.append(arr[i]).append(" ");
    }
    String string = sb.toString().trim();
    System.out.println(string);

}
  • 正则表达式的替换功能
  • String类的功能:public String replaceAll(String regex,String replacement)
public static void main(String[] args) {
    System.out.println("奥巴马是美国总统".replace("奥巴马", "*"));

    String s = "特朗普是美国总统".replaceAll("奥巴马", "***");
    System.out.println(s);


    String s2= "特  b 朗    a    普   c 是d 美  国 e 总  f 统"; //特朗普是美国总统
    //根据正则替换
    String s1 = s2.replaceAll("[a-z' ']", "");
    System.out.println(s1);


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值