正则表达式--捕获组
时间:2019-11-04
本文章向大家介绍正则表达式--捕获组,主要包括正则表达式--捕获组使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
大纲:
- 语法
- 实战
- 反向引用、替换
一、语法
捕获组:匹配子表达式内容,匹配结果以编号和显示命名的方式存在内存,可供正则本身,和替换使用。
语法:
- 数字编号(pattern),匹配结果保存为数字。
- 显示命名(?<name>pattern),匹配结果保存到变量name中。
- 非捕获(?:pattern),标识不需要保存的组。
二、实战
文本:1990-10-10
文本为一个日期,需要分别找出年、月、日。
2.1数字编号:
public static void main(String[] args) { String pattern = "(\\d+)-(\\d+)-(\\d+)"; String word = "1990-10-14"; final Pattern compile = Pattern.compile(pattern); final Matcher matcher = compile.matcher(word); if(matcher.find()){ final int i = matcher.groupCount(); System.out.println("共"+i+"组"); for (int j = 0; j <= i; j++) { System.out.println("第"+j+"组:"+matcher.group(j)); } } } /** * 共3组 * 第0组:1990-10-10 * 第1组:1990 * 第2组:10 * 第3组:14 */
第0组为整个表达式匹配内容,剩下每组对应一个括号,顺延下去。
2.2显示命名:
public static void main(String[] args) { String pattern = "(?<nian>\\d+)-(?<yue>\\d+)-(?<ri>\\d+)"; String word = "1990-10-14"; final Pattern compile = Pattern.compile(pattern); final Matcher matcher = compile.matcher(word); if(matcher.find()){ final int i = matcher.groupCount(); System.out.println("共"+i+"组"); System.out.println("年:"+matcher.group("nian")); System.out.println("月:"+matcher.group("yue")); System.out.println("日:"+matcher.group("ri")); } } /** * 共3组 * 年:1990 * 月:10 * 日:14 */
3.3非捕获组
public static void main(String[] args) { String pattern = "(?:\\d+)-(\\d+)-(\\d+)"; String word = "1990-10-14"; final Pattern compile = Pattern.compile(pattern); final Matcher matcher = compile.matcher(word); if(matcher.find()){ final int i = matcher.groupCount(); System.out.println("共"+i+"组"); for (int j = 0; j <= i; j++) { System.out.println("第"+j+"组:"+matcher.group(j)); } } } /** * 共2组 * 第0组:1990-10-14 * 第1组:10 * 第2组:14 */
如果年这一组我们不需要,我们就可以通过非捕获来排除它。
三、反向引用、替换
3.1在正则本身中使用捕获到的组就是反向引用
\数字编号 或 \k<显示命名>
例子:
找出重复字母
用\k<显示命名>
public static void main(String[] args) { String pattern = "(?<chongfu>\\w)\\k<chongfu>+"; String word = "aaabbcdddde"; final Pattern compile = Pattern.compile(pattern); final Matcher matcher = compile.matcher(word); while(matcher.find()){ System.out.println(matcher.group()); } } /** * aaa * bb * dddd */
用\数字编号>
public static void main(String[] args) { String pattern = "(\\w)\\1+"; String word = "aaabbcdddde"; final Pattern compile = Pattern.compile(pattern); final Matcher matcher = compile.matcher(word); while(matcher.find()){ System.out.println(matcher.group()); } } /** * aaa * bb * dddd */
3.2替换
替换用 $组号 表示
例子
把所有重复字母编成不重复的
public static void main(String[] args) { String word = "aaabbcdddde"; System.out.println(word.replaceAll("(\\w)\\1+", "$1")); } /** * abcde */
原文地址:https://www.cnblogs.com/liuboyuan/p/11790494.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中GridView布局实现整体居中方法示例
- Android SharedPreferences四种操作模式使用详解
- Ubuntu18.04下将 磁盘挂载在某目录下
- Android编程之绘图canvas基本用法示例
- Android 编译出错版本匹配问题解决办法
- Linux(CentOS7)使用 RPM 安装 mysql 8.0.11的教程
- Android Adapter里面嵌套ListView实例详解
- Centos7 安装达梦数据库的教程
- Android开发使用Handler实现图片轮播功能示例
- 简单实现Android刮刮卡效果
- CentOS7.4下 安装JDK1.8的图文教程
- Android Studio中导入JNI生成的.so库的实现方法
- Android实现文件上传和下载倒计时功能的圆形进度条
- 使用Apache ab进行http性能测试
- Android Imageloader的配置的实现代码