java 正则表达式_学习笔记

正则表达式的匹配方法和规则

正则表达式的案例

正则表达式在字符串方法中应用 


正则表达式的意义

正则表达式可以用一些规定的字符来制定规则,并用来校验数据格式的合法性。

 

正则表达式的匹配方法和规则

1、使用String类中的的matches方法:

  判断是否匹配正则表达式,匹配返回true,不匹配返回false
public boolean matches​(String regex):

 

2、常见的匹配规则: 

  • 字符类(默认只匹配一个字符)
字符类:

[abc]	         只能是a, b, 或c
[^abc]	         除了a, b, c之外的任何字符
[a-zA-Z]         a到z A到Z,包括(范围)
[a-d[m-p]]	     a到d,或m到p:([a-dm-p]联合 并集)
[a-z&&[def]]	 d, e, 或f(交集)
[a-z&&[^bc]]	 a到z,除了b和c:([ad-z]减法)
  •  预定义的字符类(默认匹配一个字符)
预定义的字符类:

.	任何字符
\d	一个数字: [0-9]
\D	非数字: [^0-9]
\s	一个空白字符: [ \t\n\x0B\f\r]
\S	非空白字符: [^\s]
\w	[a-zA-Z_0-9] 英文、数字、下划线
\W	 [^\w] 一个非单词字符
  •  贪婪的量词(配合匹配多个字符)
贪婪的量词(配合匹配多个字符):

X?	X , 一次或根本不
X*	X,零次或多次
X+	X , 一次或多次
X {n}	X,正好n次
X {n, }	X,至少n次
X {n,m}	X,至少n但不超过m次

简单使用:

System.out.println("a".matches("[abc]"));  将返回true

System.out.println("z".matches("[abc]"));  将返回 false

System.out.println("ab".matches("[abc]+")); 将返回true(该处使用了贪婪量词所以对照可以出现一次或者多次)

判断数字、字母、下划线且至少有5位(用贪婪量词校验):

System.out.println("454afa".matches("\\w{5,}"));  将返回true
判断验证码任意数字字母 非下划线 必须4位: 以下有两种写法

System.out.println("af1s.matches("a-zA-Z0-9"));  将返回true 

System.out.println("af1s".matches("[\\w&&[^-]]{4}"));  将返回true

正则表达式的案例

 要求:

模拟用户输入手机号码、验证格式正确,并给出提示,直到格式输入正确为止。

public class test {
    public static void main(String[] args) {
        check();//调用校验方法

    }
    //定义校验方法
    public static void check(){
        Scanner sc = new Scanner(System.in);
        //输入手机号
        while (true) {
            System.out.println("请输入手机号:");
            String phoneNum = sc.next();
            //校验手机号
            if (phoneNum.matches("1[3-9]\\d{9}")){ //正则表达式
                System.out.println("号码格式正确 ----》已通过");
                break;//验证通过 跳出循环
            }else {
                System.out.println("号码输入格式有误-");
            }
        }
    }
}

 

正则表达式在字符串方法中应用 

方法名

说明

 public String replaceAll(String regex,String newStr)

按照正则表达式匹配的内容进行替换

public String[] split(String regex):

按照正则表达式匹配的内容进行分割字符串,反回一个字符串数组。

public static void main(String[] args) {
        //split分割提取
        String names = "光线白刃取sfa1奥特水流fdhd奥特过肩摔";
        String[] arr = names.split("\\w+");
        for (int i = 0; i <arr.length ; i++) {
            System.out.println(arr[i]);
        }

    }

 

public static void main(String[] args) {
        //replaceAll替换
        String name1 = "光线白刃取sfa1奥特水流fdhd奥特过肩摔";
        String neme2 = name1.replaceAll("\\w+"," ");//将字符替换为空格
        System.out.println(neme2);
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

open_test01

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

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

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

打赏作者

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

抵扣说明:

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

余额充值