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

Java中的正则表达式

参考文档:https://blog.csdn.net/j2974500224/article/details/140896185

一、正则表达式规则

1、字符内容匹配

[] : 表示匹配括号里的任意一个字符。
[abc]: 匹配a,b,c 的任意一个字母;
[a-z]: 匹配小写字母的任意一个字母;
[^abc]: 匹配 a, b, c 以外的任意一个字符;
[A-Za-z]: 匹配所有的小写字母和大写字母的任意一个;
[a-zA-Z0-9]: 匹配所有的小写字母和大写字母和数字的任意一个;
[a-z&&[^bc]]: 匹配除了b和c以外的所有的小写字母;

2、字符类型匹配

\d: 匹配数字字符中的任意一个,相当于[0-9]
\w: 匹配单词字符(数字字母下划线)中的任意一个,相当于[a-zA-Z0-9_]
\s: 匹配空格、制表符、退格符、换行符等中的任意一个
\D: 匹配非数字字符中的任意一个,相当于[^0-9]
\W: 匹配非单词字符中的任意一个,相当于[^a-zA-Z0-9_]
\S: 匹配非空格、制表符、退格符、换行符等中的任意一个
. : 匹配除换行符(\n、\r)之外的任何单个字符,相当于[^\n\r]

3、字符数量匹配

X? : 匹配0个或1个
X* : 匹配任意多个(含0)
x+ : 匹配1个及以上
X{n} : 匹配n个
X{m,}: 匹配m个及以上
X{m,n}: 匹配m~n个

4、字符分组匹配

如:(153|156)[\d]{8} 匹配开头是153、156的号码

5、^和$

^:匹配字符串是否以指定表达式开头
如: ^[0-9]+ --> 123abc456edf789 以123开头,满足
$: 匹配字符串是否以指定表达式结尾
如: [0-9]+$ --> 123abc456edf789 以789结尾,满足

二、正则表达式应用

        /***************************************        0、字符串底层存储编码**************************************/byte[]  bytes = {-28, -72, -83, -27, -101, -67};String str1 = new String(bytes);System.out.println("str1 = " + str1);  // 中国String str2 = new String(bytes,"UTF-8");System.out.println("str2 = " + str2);   // 中国/***************************************        1、正则表达式匹配字符串**************************************/System.out.println("a".matches("[abcdefg]"));   // trueSystem.out.println("h".matches("[^abcdefg]"));  // trueSystem.out.println("+".matches("."));           // 匹配+是不是一个字符 trueSystem.out.println("-".matches("\\."));         // \\.通配符.变成了普通的点符号 falseSystem.out.println("c".matches("\\w"));         //不添加[]也可以 trueSystem.out.println("c".matches("[\\w]"));       //添加[] true// 匹配账号:账号必须是由字母数字、下划线组成的5~8位System.out.println("_abc123".matches("\\w{5,8}"));  //trueSystem.out.println("_abc123+".matches("\\w{5,8}")); //falseSystem.out.println("".matches("[a-z]?"));   //trueSystem.out.println("n".matches("[a-z]?"));  //trueSystem.out.println("1".matches("[a-z]?"));  //false// 匹配密码:密码必须是8位的数字或字母组合System.out.println("abc12345".matches("[a-zA-Z0-9]{8}")); //trueSystem.out.println("abc1234".matches("[a-zA-Z0-9]{8}"));  //falseSystem.out.println("abc123456".matches("[a-zA-Z0-9]{8}"));//false// 匹配手机:137等开头的11位数字String regex = "(13|18|15)(7|8|9)[\\d]{8}";System.out.println("13811110000".matches(regex)); //trueSystem.out.println("13311110000".matches(regex)); //false/***************************************        2、正则表达式分隔字符串**************************************//// 请使用数字将其切分成字符串数组。String text = "hello11world22smy333";String[] arr = text.split("\\d+");System.out.println(Arrays.toString(arr));text = "888hello99world10smy";arr = text.split("\\d+");System.out.println(Arrays.toString(arr));text = "123hello234world235smy";arr = text.split("3");System.out.println(Arrays.toString(arr));/***************************************        3、正则表达式替换字符串**************************************/String url = "http://www.baidu.com.cn.456";//将所有的字母替换成#url = url.replaceAll("[a-zA-Z]+","#");System.out.println("url: " + url);/***     Strirng正则的底层实现原理:*         利用Pattern类和Matcher类进行字符串的匹配*/regex = "[a-zA-Z][_$a-zA-Z0-9]{7,9}";Pattern pattern = Pattern.compile (regex);Matcher matcher = pattern.matcher("smingyu12_");boolean matches = matcher.matches();System.out.println("匹配结果:" + matches);/*** 匹配字符串的开头是否符合正则表达式*/String regex2 = "\\d+";String info = "a123abc";Pattern pattern = Pattern.compile(regex2);Matcher matcher = pattern.matcher(info);boolean result = matcher.lookingAt();System.out.println("匹配结果: " + result);/*** 匹配&提取字符串里符合正则表达式的子串*/String regex2 = "\\d+";String source = "abc123eee444ff555ggg";List<String> target = new ArrayList<>();Pattern pattern = Pattern.compile(regex2);Matcher  matcher = pattern.matcher(source);int count = 0;while (matcher.find()) {
//            target.add(source.substring(matcher.start(), matcher.end()));target.add(matcher.group());count++;}System.out.println("匹配的字串数量:" + count);System.out.println(target);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Vue.js: 构建动态用户界面的现代框架
  • C# 使用Socket通信,新建WinForm服务端、客户端程序
  • 使用 Nmap 进行 SSL/TLS 加密套件枚举
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • FreeSWITCH event_socket 配置从其他地址连接
  • 使用CUBE_MX使用I2C通信,实现对EEPROM的读写
  • AI与自然语言处理(NLP):中秋诗词生成
  • OpenAI o1模型推理能力大幅提升的背后:重复采样如何提升AI推理能力
  • Clickhouse使用笔记
  • 了解 React 应用程序中的渲染和重新渲染:它们如何工作以及如何优化它们
  • 『功能项目』战士职业平A怪物掉血【44】
  • 动态规划---不同的子序列
  • 一次RPC调用过程是怎么样的?
  • NLP与文本生成:使用GPT模型构建自动写作系统
  • 软件无线电2:矢量信号器和HackRF实现FM调制解调
  • [译]如何构建服务器端web组件,为何要构建?
  • Java到底能干嘛?
  • Linux Process Manage
  • Logstash 参考指南(目录)
  • Odoo domain写法及运用
  • redis学习笔记(三):列表、集合、有序集合
  • Redis字符串类型内部编码剖析
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • zookeeper系列(七)实战分布式命名服务
  • 关于extract.autodesk.io的一些说明
  • 简单数学运算程序(不定期更新)
  • 解决iview多表头动态更改列元素发生的错误
  • 利用DataURL技术在网页上显示图片
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 原生js练习题---第五课
  • # 计算机视觉入门
  • #mysql 8.0 踩坑日记
  • #Z0458. 树的中心2
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言)逆序输出字符串
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (差分)胡桃爱原石
  • (七)Knockout 创建自定义绑定
  • (十六)Flask之蓝图
  • (十三)Maven插件解析运行机制
  • (算法)硬币问题
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)关于pipe()的详细解析
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (转)重识new
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • ******之网络***——物理***
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .netcore如何运行环境安装到Linux服务器
  • .Net多线程总结