当前位置: 首页 > news >正文

38、Java 中的正则表达式(单字符匹配和预定义字符)

文章目录

  • 一、需求
  • 二、单字符匹配(6个)
  • 三、预定义字符(7个)

一、需求

❓ 现有一个字符串,需满足如下要求:
[6, 18] 个字符
② 只能包含字母、数字、下划线
③ 需以字母开头
❓ 如果字符串满足上述要求,返回 true,否则返回 false

   public static boolean validString(String s) {
       return s.matches("[a-zA-Z][a-zA-Z0-9_]{5,17}");
   }

🍀 正则表达式用极简的规则取代了复杂的验证逻辑
🍀 Regex Expression
🍀 正则表达式是一种通用的技术,适用于多种编程语言

二、单字符匹配(6个)

✏️ ① [abc]:字符串的某个位置(某一个字符)满足 a、b、c 中的一个

🍀 某个位置:该【单字符匹配】放的位置

public class TestDemo {
    public static void main(String[] args) {
        String regex = "[zgq]";
        System.out.println("z".matches(regex)); // true
        System.out.println("g".matches(regex)); // true
        System.out.println("q".matches(regex)); // true
        System.out.println("zgq".matches(regex)); // false
    }
}
public class TestDemo {
    public static void main(String[] args) {
        String regex = "26[abc]3q";
        System.out.println("26a3q".matches(regex)); // true
        System.out.println("26abc".matches(regex)); // false
        System.out.println("26b3q".matches(regex)); // true 
    }
}

✏️ ② [^abc]:除了 a、b、c 之外的任意单个字符

public class TestDemo {
    public static void main(String[] args) {
        String regex = "[^cat]666";
        System.out.println("c666".matches(regex)); // false
        System.out.println("a666".matches(regex)); // false
        System.out.println("t666".matches(regex)); // false
        System.out.println("bb666".matches(regex)); // false
        System.out.println("b666".matches(regex)); // true
    }
}
public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[12345]666";
        String regex2 = "[^1-5]666";
        System.out.println("1666".matches(regex1)); // true
        System.out.println("3666".matches(regex1)); // true
        System.out.println("5666".matches(regex1)); // true
        System.out.println("6666".matches(regex1)); // false

        System.out.println("1666".matches(regex2)); // false
        System.out.println("3666".matches(regex2)); // false
        System.out.println("5666".matches(regex2)); // false

        System.out.println("6666".matches(regex2)); // true
    }
}

✏️ ③ [a-zA-z]:匹配单个英文字母

public class TestDemo {
    public static void main(String[] args) {
        String regex = "[a-zA-Z]666";
        System.out.println("6666".matches(regex)); // false
        System.out.println("b666".matches(regex)); // true
    }
}

✏️ ④ [a-d[1-6]]:和 [a-d1-6] 一样(并集)

public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[a-d[1-6]]";
        String regex2 = "[a-d1-6]";
        System.out.println("a".matches(regex1)); // true
        System.out.println("e".matches(regex1)); // false
        System.out.println("1".matches(regex1)); // true
        System.out.println("7".matches(regex1)); // false

        System.out.println("a".matches(regex2)); // true
        System.out.println("e".matches(regex2)); // false
        System.out.println("1".matches(regex2)); // true
        System.out.println("7".matches(regex2)); // false
    }
}

✏️ ⑤ [zgq&&[god]]:交集

public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[zgq&&[god]]";
        System.out.println("q".matches(regex1)); // false
        System.out.println("d".matches(regex1)); // false
        System.out.println("g".matches(regex1)); // true
    }
}

✏️ ⑥ [zgq&&[god]]:取差集

public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[zgq&&[^god]]";
        System.out.println("q".matches(regex1)); // true
        System.out.println("d".matches(regex1)); // false
        System.out.println("g".matches(regex1)); // false
        System.out.println("z".matches(regex1)); // true

        // 取差集, 从字母 a 到字母 z 中去除字母 b 和 d
        String regex2 = "[a-z&&[^bd]]";
        System.out.println("d".matches(regex2)); // false
        System.out.println("a".matches(regex2)); // true
    }
}

三、预定义字符(7个)

预定义字符匹配的仍然是单个字符

📝 【.】:任意单个字符
📝 【\d】:数字
📝 【\D】:非数字
📝 【\s】:空白
📝 【\S】:非空白
📝 【\w】:字母(英文字母、下划线、数字)
📝 【\W】:非英文字母

🍀 Java 中需以两个【\】开头表示预定义字符

public class TestDemo {
    public static void main(String[] args) {
        String r1 = ".";
        System.out.println("@".matches(r1)); // true
        System.out.println("庆".matches(r1)); // true
        System.out.println("I".matches(r1)); // true
        System.out.println(" ".matches(r1)); // true
        System.out.println(".".matches(r1)); // true
    }
}
public class TestDemo {
    public static void main(String[] args) {
        // 匹配 java 文件
        String r1 = ".\\.java";
        System.out.println("a.java".matches(r1)); // true
        System.out.println("xjava".matches(r1)); // false
        System.out.println("5java".matches(r1)); // false
    }
}
public class TestDemo {
    public static void main(String[] args) {
        String r1 = "[abc]";
        String r2 = "\\[abc\\]";
        System.out.println("a".matches(r1)); // true
        System.out.println("c".matches(r1)); // true
        System.out.println("[abc]".matches(r1)); // false

        System.out.println("a".matches(r2)); // false
        System.out.println("c".matches(r2)); // false
        System.out.println("[abc]".matches(r2)); // true
    }
}

结束!如有错误,请不吝赐教

相关文章:

  • 电气论文实现:基于优化算法和python-pandapower的配电网重构(IEEE33节点算例)
  • 刚来的00后真的卷,听说工作还没两年,跳到我们公司直接起薪20k...
  • 【云原生 · Docker】Docker 镜像操作、容器操作常用指令
  • 基于粒子群优化算法的无人机路径规划与轨迹算法的实现(Matlab代码实现)
  • Spring Cloud基本介绍
  • 【目标检测】使用TensorRT加速YOLOv5
  • python数据分析及可视化(九)pandas数据规整(分组聚合、数据透视表、时间序列、数据分析流程)
  • 到了30岁,我才有了深刻的感悟:千万不要一辈子靠技术生存
  • 过滤器和拦截器的区别
  • i.MX 6ULL 驱动开发 十九:RGBLCD
  • 前端谷歌浏览器基本介绍及前后端分离原理分析
  • Day12-尚品汇-trade静态组件
  • 十大排序算法(java实现万字详解)
  • Qt文档阅读笔记-Hello Speak Example
  • 【Golang开发面经】知乎(两轮技术面)
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Asm.js的简单介绍
  • golang 发送GET和POST示例
  • Java超时控制的实现
  • JS笔记四:作用域、变量(函数)提升
  • nodejs:开发并发布一个nodejs包
  • Python连接Oracle
  • Redis 懒删除(lazy free)简史
  • ubuntu 下nginx安装 并支持https协议
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 关于extract.autodesk.io的一些说明
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 时间复杂度与空间复杂度分析
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 大数据全解:定义、价值及挑战
  • ​渐进式Web应用PWA的未来
  • #mysql 8.0 踩坑日记
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • %check_box% in rails :coditions={:has_many , :through}
  • (libusb) usb口自动刷新
  • (编译到47%失败)to be deleted
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)基于IDEA的JAVA基础10
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)linux下的时间函数使用
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)Linux网络编程入门
  • *上位机的定义
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .Net Remoting常用部署结构
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • /etc/fstab 只读无法修改的解决办法
  • /run/containerd/containerd.sock connect: connection refused
  • @ComponentScan比较
  • [14]内置对象