Android 正则表达式

简介: Android 正则表达式

介绍


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


使用


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


下面来使用一些基本的元字符进行操作,用代码来示例,

\ 一个斜杠表示将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。


一、判断


使用

public boolean matches(String regex)


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


    System.out.println("a".matches("\\d"));
        System.out.println("1".matches("\\d"));


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


运行结果:


20210711103646659.png


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


System.out.println("1234567890".matches("\\d*"));


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


1665753301991.png


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


1. 手机号判断


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


  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位,下面运行一下,看这个结果就很明显了,


20210711111424350.png


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


2. 姓名判断


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


  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不在范围内,运行结果如下:


20210711113547911.png


3. 身份证号判断


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


  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。 可以使用自己的身份证进行一下验证,有问题的话告诉我,我及时改正。


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


20210711124106196.png


分析:


[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。$ 表示结束。


4. QQ判断


在日常的应用注册中,对于QQ的检查也是常见的,而QQ号最短是5位、最长是10位。第一个数字在1-9之间,第二个数字在0-9之间。因此可以这样写:


  public static void main(String[] args) {
        String qqRegex = "[1-9][0-9]{4,9}";
        String[] qqStr = {"55555","123456","12337789","1317986759","0323429","47892799778"};
        for (String qq : qqStr) {
            System.out.println(qq.matches(qqRegex));
        }
    }


运行一下:


20210715181118517.png


相信这个正则就不用解释了。


5. 邮箱判断


邮箱也是常用的,代码如下:


  public static void main(String[] args) {
        String emailRegex = "^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$";
        String[] emailStr = {"lonelyholiday@qq.com","123@163.com","dadadadasd@","www.casda@"};
        for (String email : emailStr) {
            System.out.println(email.matches(emailRegex));
        }
    }


运行结果:


2021071518150597.png


这个正则就有必要说一下了,

  • \w 表示匹配字符,\W表示匹配非字符。
  • [-+.] 表示可以使用 - 、+ 、.
  • @ 就是邮箱特有的符号
  • \.表示除换行符以外的所有字符。

后面的就都是常规的了

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


二、分割


public String[] split(String regex)


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


1. 字符分割


    public static void main(String[] args) {
        String dateStr = "2021-07-11";
        for (String s : dateStr.split("-")) {
            System.out.println(s);
        }
    }


运行结果:


20210711125004320.png


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


2. 字符串分割


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


    public static void main(String[] args) {
        String str = "abc1123das32dsa36das34DA";
        for (String s : str.split("\\d+")) {
            System.out.println(s);
        }
    }


运行一下:


20210711125746797.png


那如果要得到数字呢?


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


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


20210711130209811.png


三、替换


public String replaceAll(String regex,String replacement)


1. 字符串替换


    public static void main(String[] args) {
        String str = "abc123";
        String resultStr = str.replaceAll("\\d+", "defg");
        System.out.println(resultStr);
    }


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


20210711131914429.png


2. 字符替换


  public static void main(String[] args) {
        String str = "2021-07-11";
        String resultStr = str.replaceAll("-", "/");
        System.out.println(resultStr);
    }

20210711132401916.png


20210711132401916.png


如果是Android开发者的话可以是我的开源库里面,通过依赖直接使用相应的正则进行相应的检查


库里是一些Android开发中常用的工具类,会一直更新,也希望多提宝贵意见。

欢迎Stat 和 Fork。

相关文章
|
前端开发 Android开发 数据安全/隐私保护
Android前端正则表达式(通用)
Android前端正则表达式(通用)
151 0
|
Android开发
Android 正则表达式
 1、相关知识链接       正则表达式语法   https://msdn.microsoft.com/zh-cn/library/ae5bf541(v=vs.80).aspx       正则表达式入门教程   http://www.jb51.net/tools/zhengze.html  2、分割字符串   package com.app; public class AA { // Pattern(模式类)和Matcher(匹配器类)。
1189 0
|
Android开发
我的Android进阶之旅------>Android使用正则表达式匹配扫描指定目录下的所有媒体文件(音乐、图像、视频文件)
      今天使用正则表达式匹配指定目录下的所有媒体文件,下面将这份代码简化了,可以收藏下来,当作工具类。 package match; import java.
1568 0
|
Java Android开发
实用正则表达式扫描android SDcard的文件
代码片段,双击复制 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
1421 0
|
Android开发
实用正则表达式扫描android SDcard的文件
<div style="word-wrap:break-word; color:rgb(68,68,68); font-family:'Microsoft Yahei',Tahoma,Simsun; font-size:14px; line-height:21px"> <div id="highlighter_719240" class="syntaxhighlighter notran
1799 0
|
数据库 Python
Python网络数据抓取(8):正则表达式
Python网络数据抓取(8):正则表达式
|
自然语言处理 JavaScript 前端开发
Python高级语法与正则表达式(二)
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。
|
安全 算法 Python
Python高级语法与正则表达式(一)
Python提供了 with 语句的写法,既简单又安全。 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。