您现在的位置是:首页 > 正文

Java:常用类解析5(正则表达式)

2024-02-01 05:47:00阅读 2

正则表达式不仅仅是Java的技术,在任何一门编程语言中都会存在,是一种通用的IT技术。除了有一些由于语言不同而导致的一些语法不同,其理念和用法在任何编程语言中基本一致。正则表达式,主要用于匹配(查找 替换 计数)字符串中的数据的,也叫做文本匹配技术

正则表达式的由来

在了解正则表达式之前,我们先看几个非常常见的问题:

  • 如何判断字符串是否是有效的电话号码?例如: 010-1234567 , 123ABC456 ,
    13510001000 等;
  • 如何判断字符串是否是有效的电子邮件地址?例如: test@example.com ,
    test#example 等;
  • 如何判断字符串是否是有效的时间?例如: 12:34 , 09:60 , 99:99 等。

一种直观的想法是通过程序判断,这种方法需要为每种用例创建规则,然后用代码实现。下面是判断手机号的代码:

public boolean isPhoneNumber(String s) {
   
    if (s.length() != 11) {
   
        return false;
    }
    for (int i = 0; i < s.length(); i++) {
   
        char c = s.charAt(i);
        if (c < '0' || c > '9') {
   
            return false;
        }
    }
    return true;
}

对于上述问题的求解而言,我们只解决了长度的问题,内容必须是数字字符的问题
但是,对于手机号这个特殊的数字而言: 第1位能否为0? 前3位表示对应通讯公司能否确定?

除了判断手机号,我们还需要针对问题判断电子邮件地址、电话、邮编等等:

public boolean isValidEmail(String s) {
    ... }
public boolean isValidPhoneNumber(String s) {
    ... }
public boolean isValidZipCode(String s) {
    ... }

为了每一种判断逻辑都要编写代码实现是太繁琐了,而正则表达式就是用来解决这些问题的。
如下代码:

public boolean isPhoneNumber(String s) {
   
    //确定了长度为11 并且也确定了必须是数字字符
    return s.matches("\\d{11}");
}

就目前而言,问题的解决的确变简单了,但代码可读性的就更难了。所以在Java标准库中java.uitl.regex包里内置了正则表达式引擎,使得在Java程序中使用正则非常方便。使用的正则表达式就是一个描述规则的字符串,所以我们只需要编写正确的规则,我们就可以让正则表达式引擎去判断目标字符串是否符合规则。

匹配规则

正则表达式的匹配规则是从左到右按规则匹配的

匹配任意字符

大多情况下,我们想要的匹配规则更多的是模糊匹配

  //  `.` 匹配任意一个字符
        String regex05 = "a.c";
        System.out.println("abc".matches(regex05))

网站文章

  • 现在.net的web框架有哪些?

    https://www.zhihu.com/question/366937369

    2024-02-01 05:46:53
  • 【Linux】CentOS7 常用命令集合 热门推荐

    【Linux】CentOS7 常用命令集合 热门推荐

    这两天一直在对CentOS 7.2进行初体验,各种学习命令肿么用,不过其实大多和DOS是一样的,只是命令的表达上可能有点儿不一样,毕竟这些都不是一家出来的嘛~这里就分享一些近期我常用的CentOS命令给大家,方便学习~

    2024-02-01 05:46:24
  • 使用jdom获取xml中多个相同标签的值

    使用jdom获取xml中多个相同标签的值

    1.导入的maven包 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency...

    2024-02-01 05:46:17
  • C温故补缺(九):字节对齐与排序

    C温故补缺(九):字节对齐与排序

    这样就可以把几个不同的对象用一个字节的二进制位域来表示。因为C语言有默认的对齐方式,段内按4字节对齐,所以虽然Data只用了两位,仍要申请4字节的内存。一般说,一个位域只能在一个字节中,一个字节可以有...

    2024-02-01 05:46:10
  • Android实现金额输入小数点

    Android实现金额输入小数点

    Android实现金额输入小数点。

    2024-02-01 05:46:03
  • 单台服务器多台tomcat性能jvm配置,Tomcat性能配置之多并发(篇三)

    Tomcat中server.xml配置中提供连接池功能,以及并发情况下访问数量增多,导致服务器压力较大,甚至可能由于线程数量、连接数分配不合理导致服务器崩溃,所以我们需要修改服务器部分参数。(我的硬件...

    2024-02-01 05:45:34
  • Android使用okhttp进行文件上传以及显示进度百分比

    Android使用okhttp进行文件上传以及显示进度百分比

    本人专注于Android/java/数据库/微信小程序技术领域的开发,以及有好几年的计算机毕业设计方面的实战开发经验和技术积累;尤其是在安卓(Android)的app的开发和微信小程序的开发,很是熟悉和了解;本人也是多年的Android开发人员;希望我发布的此篇文件可以帮助到您;

    2024-02-01 05:45:26
  • 2022.7.25-7.31 AI行业周刊(第108期):值钱比赚钱更重要

    2022.7.25-7.31 AI行业周刊(第108期):值钱比赚钱更重要

    篇章一:值钱比赚钱更重要上周有个粉丝私信问我,他毕业后通过培训加入了AI行业,将近1年多了。最近想跳槽,问我按照他现在的情况,应该要多少钱一个月?我问他,这一年多的工作,有哪方面的学习积累?做过哪些项...

    2024-02-01 05:45:18
  • Xcode编译报错:interface Builder xib Compiler error

    interface Builder xib Compiler error: Interface Builder encountered an error communicating with the iPhone Simulator 解决方案:关闭模拟器,重启

    2024-02-01 05:44:44
  • 【docker】Docker run -it centos FATAL:Kernel too old

    【docker】Docker run -it centos FATAL:Kernel too old

    1.问题出现 使用docker pull centos 下载镜像文件。在使用docker run -it centos 启动失败。 [root@localhost ~]# docker run -it centos FATAL: kernel too old 说内核过旧。 2.问题分析 一般用docker pull centos 不添加参数 默认就是最新的版本,因此打算看看是不是版...

    2024-02-01 05:44:39