前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 正则表达式

Android 正则表达式

作者头像
晨曦_LLW
发布2021-07-14 14:07:48
1.5K0
发布2021-07-14 14:07:48
举报
文章被收录于专栏:Android、鸿蒙开发

正则表达式

介绍

  正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。

使用

  正则表达式的可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符")。

下面来使用一些基本的元字符进行操作,用代码来示例, \ 一个斜杠表示将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。

一、判断

使用

代码语言:javascript
复制
public boolean matches(String regex)

例如"\\d",表示检查是否为数字。

代码语言:javascript
复制
		System.out.println("a".matches("\\d"));
        System.out.println("1".matches("\\d"));

“a”和“1”表示要检查的字符,matches表示开始检查,“\\d”表示检查规则,\\d表示检查数字。

运行结果:

在这里插入图片描述
在这里插入图片描述

如果是一串数字的话就不能这么写了。如果我的字符串是1234567890,那么就是匹配多次,就要是使用 * 了,例如

代码语言:javascript
复制
System.out.println("1234567890".matches("\\d*"));

执行之后返回true。 * 表示匹配次数为0次或者多次,这样的符号还有一些其他的,如下表所示

符号

次数

*

0次或多次

+

1次或多次

?

0次或1次

{n}

刚好n次

{n,m}

n到m次

上述的操作貌似没有什么实际意义,那么下面写一点有意义的例子。

1. 手机号判断

比如说检查13、15、19开头的手机号,那么就可以这么写。

代码语言:javascript
复制
	public static void main(String[] args) {
        String phoneNum = "1[359]\\d{9}";
        String[] phoneArr = {"13575137717","15575137717","19575137717","195751377171","1957513771"};

        for (String s : phoneArr) {
            System.out.println(s.matches(phoneNum));
        }
    }

下面来说一下这个正则表达式 1[359]\\d{9} ,1表示开头的字符,[359]表示里面的3、5、9任意一个字符,后面的\\d表示检查数字,{9}表示匹配9次,加上前面的两位就是11位,下面运行一下,看这个结果就很明显了,

在这里插入图片描述
在这里插入图片描述

最后两个为什么为false呢,因为有一个12位数字,一个是10位数字,不符合手机号的要求。

2. 姓名判断

正则其实还判断是否为中文,例如:汉族人的姓名通常是2到4个字,那么就可以这么来写。

代码语言:javascript
复制
	public static void main(String[] args) {
        
        String userNameRegex = "^[\\u4e00-\\u9fa5]{2,4}";

        String[] nameArr = {"王","段誉","李世民","诸葛山珍","西毒欧阳锋"};
        for (String name : nameArr) {
            System.out.println(name.matches(userNameRegex));
        }
    }

下面来解释一下:^ 是匹配输入字符串开始的位置,\u4e00-\u9fa5”是unicode编码,一种全世界语言都包括的一种编码。(国际化功能中常常用到),\u4e00-\u9fa5是用来判断是不是中文的一个条件。{2,4}是匹配2到4次,一个匹配一个字符,所以1和5不在范围内,运行结果如下:

在这里插入图片描述
在这里插入图片描述

3. 身份证号判断

身份证号判断通常在用户实名认证的时候,不过现在基本上都会使用第三方平台直接接入,不过依然还是要知道怎么判断的身份证号。可以这么来写。

代码语言:javascript
复制
	public static void main(String[] args) {

        String idCardRegex = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}([0-9Xx])$";
        String idCard = "430428196808158292";
        System.out.println(idCard.matches(idCardRegex));
    }

可以运行一下,肯定是true。 可以使用自己的身份证进行一下验证,有问题的话告诉我,我及时改正。

你会发现这个正则表达式好长,一下子人就看懵了,下面进行逐步的分解。

在这里插入图片描述
在这里插入图片描述

分析:

  • [1-9]\\d{5}表示身份证前6位,也就是地址码。
  • (18|19|20)\\d{2},表示年份,这里的|表示或者的意思,也就是说18、19、20。\\d{2}表示具体的年份。这里的年份可以根据实际业务需要自己再去更改。
  • ((0[1-9])|(1[0-2])) 表示月份,月份是01 - 12。(0[1-9]),表示0开头,[1-9]就可以匹配除0之外任意一个数字,如果月份不是0开头,就会进入(1[0-2]),匹配范围就是10、11、12。
  • (([0-2][1-9])|10|20|30|31),这里表示日期,01-31。([0-2][1-9])表示,01-09、11-19、21-29,然后通过|10|20|30|31补齐剩余的日期。
  • \\d{3} 顺序码,数字即可。
  • ([0-9Xx]) 校验码 ,校验码可以是0 - 9 、X、x。 表示结束。

这么一来你是不是觉得正则表达式挺有意思的,手动滑稽

二、分割

代码语言:javascript
复制
public String[] split(String regex)

这个分割其实在开发中很常见的,下面举例说明。

1. 字符分割

代码语言:javascript
复制
    public static void main(String[] args) {

        String dateStr = "2021-07-11";

        for (String s : dateStr.split("-")) {
            System.out.println(s);
        }
    }

运行结果:

在这里插入图片描述
在这里插入图片描述

上面是通过 - 来分割字符串变成一个字符串数组,然后遍历打印。

2. 字符串分割

例如有一个字符串里面有数字和字母,我要得到字母,

代码语言:javascript
复制
    public static void main(String[] args) {
        
        String str = "abc1123das32dsa36das34DA";

        for (String s : str.split("\\d+")) {
            System.out.println(s);
        }
    }

运行一下:

在这里插入图片描述
在这里插入图片描述

那如果要得到数字呢?

代码语言:javascript
复制
	public static void main(String[] args) {

        String str = "abc1123das32dsa36das34DA";
        
        for (String s : str.split("[a-zA-Z]+")) {
            System.out.println(s);
        }
    }

字母分大写小写,运行结果如下:

在这里插入图片描述
在这里插入图片描述

三、替换

代码语言:javascript
复制
public String replaceAll(String regex,String replacement)

1. 字符串替换

代码语言:javascript
复制
    public static void main(String[] args) {

        String str = "abc123";
        String resultStr = str.replaceAll("\\d+", "defg");
        System.out.println(resultStr);
    }

将数字替换为字母,运行一下:

在这里插入图片描述
在这里插入图片描述

2. 字符替换

代码语言:javascript
复制
	public static void main(String[] args) {

        String str = "2021-07-11";
        String resultStr = str.replaceAll("-", "/");
        System.out.println(resultStr);
    }
在这里插入图片描述
在这里插入图片描述

这篇文章后续还会更新,后续我会写一个工具类或者方法自己的库里面去,用于Android依赖使用,山高水长,后会有期~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/07/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则表达式
  • 介绍
  • 使用
    • 一、判断
      • 1. 手机号判断
      • 2. 姓名判断
      • 3. 身份证号判断
    • 二、分割
      • 1. 字符分割
      • 2. 字符串分割
    • 三、替换
      • 1. 字符串替换
      • 2. 字符替换
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档