Java 正则表达式分组匹配

前几篇文章都是简单判断是否满足匹配规则,当需要提取匹配结果时就用到分组匹配

分组匹配 可以判断是否满足正则表达式,然后提取出子串。
在这里插入图片描述
有些时候电话号码是以 123-4567-8899 这样显示的,我们要判断某个字符串是这种形式的并分别提起三段数字。

import java.util.regex.Matcher;
import java.util.regex.Pattern;public class RegexDemo {public static void main(String[] args) {Pattern p = Pattern.compile("(\\d{3})\\-(\\d{4})-(\\d{4})");Matcher m = p.matcher("123-4567-8899");if (m.matches()) {String s0 = m.group(0);String s1 = m.group(1);String s2 = m.group(2);String s3 = m.group(3);System.out.println("s0:"+s0);System.out.println("s1:"+s1);System.out.println("s2:"+s2);System.out.println("s3:"+s3);} else {System.out.println("error");}}}

结果,

s0:123-4567-8899
s1:123
s2:4567
s3:8899

Matcher.group(index) 方法,

  • 参数传 0 表示 整个正则表达式匹配到的字符串 。
  • 参数传 1 表示第 1 个子串,
  • 参数传 2 表示第 2 个子串。
  • 参数传 n 表示第 n 个子串。(注意子串数量,防止数组越界)

注意这两种写法是不同的,

Pattern p = Pattern.compile("(\\d{3})\\-(\\d{4})-(\\d{4})");// 写法1
Pattern p = Pattern.compile("\\d{3}\\-\\d{4}-\\d{4}");// 写法2
  • 写法1 :正确的,每个子串用 () 包起来,共 3 个子串。调用 Matcher.group(index) 传 0、1、2、3 都正常。
  • 写法2 :只满足 m.matches() ,子串没有用 () 包起来,调用 Matcher.group(index) 只能传 0,
    否则报错 java.lang.IndexOutOfBoundsException: No group 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/164100.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis 扩展 RedisBloom 插件,解决缓存击穿、穿透

文章目录 一、概述二、编译准备2.1 升级 make2.2 安装 Python3 三、编译 RedisBloom四、测试 RedisBloom五、应用场景5.1 缓存击穿5.2 缓存穿透5.3 原理总结 六、存在的问题 如果您对Redis的了解不够深入请关注本栏目,本栏目包括Redis安装,Redis配置文件…

两个栈实现队列

要用两个栈实现队列,就需要了解栈和队列的特性,栈是先进后出,队列是先进先出。基本思路是,把数据先压入栈1中,然后数据在栈1中输出再压入栈2,输出后就能实现队列的先进先出。 package Package;import java.…

SPASS-数据收集及预处理

统计数据的收集 问卷设计 问卷构成 (1)标题 (2)导语(前言) (3)正文 (4)结束语 问卷的问题类型 (1)封闭型问题 (2&…

成员变量为动态数据时不可轻易使用

问题描述 业务验收阶段,遇到了一个由于成员变量导致的线程问题 有一个kafka切面,用来处理某些功能在调用前后的发送消息,资产类型type是成员变量定义; 资产1类型推送消息是以zichan1为节点;资产2类型推送消息是以zi…

【Java】IntelliJ IDEA使用JDBC连接MySQL数据库并写入数据

目录 0 准备工作1 创建Java项目2 添加JDBC 驱动程序3 创建数据库连接配置文件4 创建一个 Java 类来连接和操作数据库5 运行应用程序 在 IntelliJ IDEA 中连接 MySQL 数据库并将数据存储在数据表中,使用 Java 和 JDBC(Java Database Connectivity&#xf…

老电脑升级内存、固态硬盘、重新装机过程记录

基础环境: 电脑型号:联想XiaoXin700-15ISK系统版本:Windows10 家庭中文版 版本22H2内存:硬盘: 升级想法: 内存升级,固态硬盘升级,系统重装(干净一点) 升级内存…

【NLP】特征提取: 广泛指南和 3 个操作教程 [Python、CNN、BERT]

什么是机器学习中的特征提取? 特征提取是数据分析和机器学习中的基本概念,是将原始数据转换为更适合分析或建模的格式过程中的关键步骤。特征,也称为变量或属性,是我们用来进行预测、对对象进行分类或从数据中获取见解的数据点的…

unity打AB包,AssetBundle预制体与图集(三)

警告: spriteatlasmanager.atlasrequested wasn’t listened to while 条件一:图片打图集里面去了 条件二:然后图集打成AB包了 条件三:UI预制体也打到AB包里面去了 步骤一:先加载了图集 步骤二:再加载UI预…

git增加右键菜单

有次不小心清理系统垃圾,把git右击菜单搞没了,下面是恢复方法 将下面代码存为.reg文件,双击后导出生效,注意,你安装的git必须是默认C盘的,如果换了地方要改下面注册表文件中相关的位置 Windows Registry …

Mysql数据库的备份和恢复及日志管理

一、数据备份概述 1.1 备份的分类 完全备份:整个数据库完整地进行备份 增量备份:在完全备份的基础之上,对后续新增的内容进行备份 冷备份:关机备份,停止mysql服务,然后进行备份 热备份:开机备…

【数据开发】大数据平台架构,Hive / THive介绍

1、大数据引擎 大数据引擎是用于处理大规模数据的软件系统, 常用的大数据引擎包括Hadoop、Spark、Hive、Pig、Flink、Storm等。 其中,Hive是一种基于Hadoop的数据仓库工具,可以将结构化的数据映射到Hadoop的分布式文件系统上,并提…

SQL注入漏洞:CMS布尔盲注python脚本编写

SQL注入漏洞:CMS布尔盲注python脚本编写 文章目录 SQL注入漏洞:CMS布尔盲注python脚本编写库名爆破爆破表名用户名密码爆破 库名爆破 import requests #库名 database"" x0 while requests.get(urlf"http://10.9.47.77/cms/show.php?id33%20and%20length(data…