Java正则多次匹配和多次组匹配

关于正则表达式 , 可以学习下这篇介绍 : 正则表达式

对于多次匹配, 正则表达式就需要讲究些技巧了.

替换

单文的多次匹配

有以下几种方式 , 把a全匹配替换

替换 a

"aab".replaceAll("a{1}", "x"); //xxb

"aba".replaceAll("a{1}", "x"); //xbx

替换 aa

"abaaabaaaba".replaceAll("a{2}", "x"); //abxabxaba

"abaabaaaaba".replaceAll("a{2}", "x"); //abxbxxba

replaceAll()方法会将所有匹配到的全部替换掉.

提取

提取就需要用到group了.

提取 a

Matcher matcher = Pattern.compile("(a)").matcher("ab");

if(matcher.find()){

System.out.println(matcher.group());

}

--------

// 结果

a

提取多个 a

group只有提取一次匹配到的 , 要多次提取 , 需要循环匹配.

Matcher matcher = Pattern.compile("(a)").matcher("aba");

int matcher_start = 0;

while (matcher.find(matcher_start)){

System.out.println(matcher.group(1));

matcher_start = matcher.end();

}

------------

// 结果

a

a

提取复杂内容

示例在一个文本中提取多个xml标签

String txt = "abc123这是root1这是root2";

Matcher matcher = Pattern.compile("(.*?)").matcher(txt);

int matcher_start = 0;

while (matcher.find(matcher_start)){

System.out.println(matcher.group(1));

matcher_start = matcher.end();

}

------

// 结果

这是root1

这是root2

group使用的注意点

多匹配和少匹配

上面的复杂示例中, 正则是 (.*?) , 中间的分组匹配是 (.*?) ,里面是有个问号?的 .

正则默认是多匹配的, 尽可能多的匹配到文本.

多匹配

那么不加?时, 只能匹配到一个文本 , (.*) 匹配到的是: 这是root1这是root2 , 会把中间的全部匹配进去了. 这就是多匹配

少匹配

要尽可能少的匹配 , 就需要加上?,(.*?) 匹配到的是: 这是root1. 这个结果一般才是想要的.

group 匹配的组的顺序

matcher.group(1) // 这里是group序号1

group匹配后得到是一个数组 , 数组0位置是全匹配文本 , 数组1位置才是第一个匹配到的分组.

例如:

上面的示例中, (.*?)得到的group(0) 是 这是root1 .

序号不好识别的话, 可以用别名来识别 .

String txt = "abc123这是root1这是root2";

Matcher matcher = Pattern.compile("(?.*?)").matcher(txt);

int matcher_start = 0;

while (matcher.find(matcher_start)){

System.out.println(matcher.group("element"));

matcher_start = matcher.end();

}

------

// 结果

这是root1

这是root2

element就是文本的别称 , 可以直接用别称提取内容.

如果文章有帮助到您,请点个赞,您的反馈会让我感到文章是有价值的

Java正则多次匹配和多次组匹配

Java正则多次匹配和多次组匹配相关教程

java 多次正则匹配_Java正则多次匹配和多次组匹配相关推荐

  1. java查找规律的方法_Java正则速成秘籍(一) - 招式篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  2. java 正则 空格_java 正则匹配空格字符串 正则表达式截取字符串

    java 正则匹配空格字符串 正则表达式截取字符串 需求:从一堆sql中取出某些特定字符串: 比如配置的sql语句为:"company_code = @cc and project_id = ...

  3. java正则 环视_Java正则环视和反向引用功能与用法详解

    本文实例讲述了Java正则环视和反向引用功能与用法.分享给大家供大家参考,具体如下: 环视 1.环视概念 环视,又称为零宽断言,简称断言. 环视强调位置(前面或后面),必须匹配环视表达式,才能匹配成功 ...

  4. java正则手机号_Java正则替换手机号代码实例

    在日常生活中,我们经常会遇到将一个手机号的4-7位字符串用正则表达式替换为为星号"*".这是出于对安全性和保护客户隐私的考虑将程序设计成这样的.下面我们就来看看具体代码. pack ...

  5. java 身份证地址提取籍贯_java从地址串中解析提取省市区-完美匹配中国所有地址|自动解析地址...

    前段时间项目中要解析android定位传的一个地址串 分别存入 省 市 区 字段,网上找的 写正则 的方法大都只能解析 xx省xx市xx区 这样的大众化地址,而对于一些命名比较特别的地址(比如:西藏自 ...

  6. java 正则 标签内容_java正则匹配html片段,并取得标签中的内容

    最近java群好友发来一个html代码,要帮忙匹配查找html代码里面特定的内容: 代码如下: 年代:2013年 朝向:东北 楼层:第10层(共33层) 结构:平层 装修:毛坯 住宅类别:普通住宅 建 ...

  7. java正则匹配_JAVA正则表达式匹配括号

    JAVA的正则表达式目前还不支持平衡组,要实现匹配括号只有定制深度. 其原理就是不断循环匹配括号里的内容和括号后面的内容(\\([^\\(\\)]*\\)[^\\(\\)]*)* 例子: //匹配二级 ...

  8. java 正则替换 或_Java正则替换

    /** * 替换上下文 * * @author tianhongjun * */ static class EvaluateContext { private int startPos; privat ...

  9. java武功秘籍_Java正则速成秘籍(一)之招式篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression)是一种文本规则,可以用来校验.查找.替换与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文本匹配工具,但 ...

  10. java速成慕课_Java正则速成秘籍之招式篇

    导读 正则表达式是什么?有什么用? 正则表达式(Regular Expression) 是一种文本规则,可以用来 校验 . 查找 . 替换 与规则匹配的文本. 又爱又恨的正则 正则表达式是一个强大的文 ...

最新文章

  1. 【转】QT事件传递与事件过滤器
  2. ubuntu nano用法
  3. [jstips]向数组中插入一个元素
  4. jQuery的后代遍历
  5. CentOS6.7安装elasticsearch5.4 以及kibana
  6. Libra白皮书解读
  7. 模板:Link Cut Tree(LCT)
  8. Mybatis—代理开发和核心配置文件深入
  9. 格式化字符串两种方式
  10. 仿支付宝手势密码解锁
  11. windows cmd命令行查看结束进程
  12. hdu 5053 the Sum of Cube(水)
  13. 期货术语-关于升、贴水,点价,洗船
  14. 电压负反馈放大电路(基于三极管)
  15. 变限积分性质的总结笔记
  16. 为实体提供枚举类型的支持
  17. 交换机模拟配置软件_GNS3 for mac(网络模拟工具)
  18. 大疆遥控器向手机充电
  19. Attempted import error: ‘Redirect‘ is not exported from ‘react-router-dom‘ (imported as ‘Redirect‘)
  20. java对接中金支付接口

热门文章

  1. 小学生听力测试软件,亲测十款小学英语APP,为了孩子请收藏
  2. 伺服电机和步进电机的区别
  3. 大数据平台技术架构-图
  4. Nessus 下载失败,找不到nessuscli
  5. 编写一个第三方库(动态库和静态库)
  6. 软考-中级-网络工程师-知识点个人总结(二)
  7. Error: DPI-1047: Cannot locate a 64-bit Oracle Client library: “问题
  8. python怎么开发服务器_Python服务器开发(1)
  9. 四阶龙格库塔法的基本思想_四阶龙格库塔实验报告
  10. 极坐标梯度公式_一般坐标系下的梯度散度旋度及拉普拉斯形式