这段代码中真正匹配到的字符串是”ld”,所谓的顺序环视就是在匹配这个字符串前的那个位置。

相信大家现在应该能够推测出逆序环视了吧。匹配的是ld后面那个位置。

环视的例子

理解了上诉环视的列子我们来解决一开始那个问题。我们可以先分析一下,需要满足这样的条件。左边要是数字,右边的数字个数是3的倍数。

接下来就是对这个条件所实现的java代码。

String str = "12345678";

Pattern pattern= Pattern.compile("(?<=\\d)(?=(\\d{3})+$)");

Matcher matcher=pattern.matcher(str);

System.out.printf(matcher.replaceAll(","));

(?<=\\d)这个表达式满足了左边是数字,可以想象一下。因为逆序环视是匹配字符串右边的位置,也就是\d右边的位置。那不就是说明了这个位置的左边是\d吗。对(?=(\\d{3})+$)的理解可能有点不太容易。如果是孤立的(\\d{3})+$匹配的是从字符串末尾向左数字的个数正好是3的倍数。但是加入顺序环视之后意义就不一样了它能匹配右边数字的个数正好是3的倍数的位置。$是关键,没有了这个符号,也就意味着可以不是从最后一个数字开始匹配的。这里可以结合程序好好的想想。这样两个条件就都满足了。也就能够匹配到正确的位置了。

但是如果给的字符串不一定是纯数字,可能是”12345678$”这样的形式,上诉的正则就不管用了。在这里我再引入两个概念就是否定顺序环视(?!)和否定逆序环视(?

在(?=表达式)中,意味表达式能够匹配右侧的文本,而(?!表达式)则以为表达式不能匹配右侧的文本。那么可以将正则改成

"(?<=\\d)(?=(\\d{3})+(?!\\d))"也许你认为可以将(?!\\d)改成\D,但是这两个其实是有区别的,\D是匹配一个非数字的字符,也就是说必须匹配一个字符。如果给你的数字是"12345678"这样就不能得到匹配了.

java正则 环视_正则表达式之环视(java)相关推荐

  1. java 正则 关键字_正则表达式关键字

    在表达式中有特殊意义,需要添加 "\" 才能匹配该字符本身的字符汇总 字符 说明 ^ 匹配输入字符串的开始位置.要匹配 "^" 字符本身,请使用 "\ ...

  2. java 正则匹配_正则表达式真的很强大,可惜你不会写

    专注于Java领域优质技术,欢迎关注 本文旨在用最通俗的语言讲述最枯燥的基本知识 文章提纲: 元字符 重复限定符 分组 转义 条件或 区间 正则表达式在几乎所有语言中都可以使用,无论是前端的JavaS ...

  3. java 正则 大括号_正则表达式(括号)、[中括号]、{大括号}的区别小结 通用所有语言 系统...

    正则表达式的() [] {}有不同的意思. () 是为了提取匹配的字符串.表达式中有几个()就有几个相应的匹配字符串. (\s*)表示连续空格的字符串. []是定义匹配的字符范围.比如 [a-zA-Z ...

  4. java 正则 懒惰_正则表达式懒惰模式

    在写BLOG练习程序的时候,考虑到用BBS直接输入可能会更加简洁些.但是如何转换又成了一个问题. 在群里问了问朋友,一致认同使用正则表达式最好.于是又翻起了那篇我觉得很好的正则表达式三十分钟入门,看了 ...

  5. java 正则 懒惰_正则表达式的最大最小原则(就是懒惰和贪婪定理),java版本

    今天问了老大,学了一个新名词,其实文章里面有,我没有仔细看,叫做懒惰和贪婪定理.原文如下 当正则表达式中包含能接受重复的限定符时,通常的行为是(在使整个表达式能得到匹配的前提下)匹配尽可能多的字符.以 ...

  6. java正则题_牛客网java编程题整理(不定期更新)

    文章目录 190516 - 调整数组顺序使奇数位于偶数前面 题目 我的代码 高赞代码(via:海天一色) 190517 - 链表中倒数第k个结点 题目 我的代码 高赞代码(via:渡不过己) 1905 ...

  7. java 正则 空白字符_关于JAVA正则匹配空白字符的问题

    今天遇到一个字符串,怎么匹配空格都不成功!!! 我把空格复制到test.properties文件 显示"\u3000" ,这是什么? 这是全角空格!!! 查了一下    \s   ...

  8. java 正则 栈溢出_关于Java正则引起的StackOverFlowError问题以及解决方案 | 学步园...

    java 正则异常 java.lang.StackOverflowError: 在使用正则表达式的时候,底层是通过迭代方式执行的,每一层的迭代都会在栈线程的大小中占一定内存,如果迭代的层次很多,就会报 ...

  9. java 正则 实例_Java正则表达式实例详解

    创建正则表达式 你可以从比较简单的东西入手学习正则表达式.要想全面地掌握怎样构建正则表达式,可以去看JDK 文档的java.util.regex 的Pattern 类的文档. 字符 B 字符B \xh ...

最新文章

  1. WCF访问iis元数据库失败--解决方法
  2. python时间模块datetime模块
  3. 内核模式下的注册表操作
  4. 学习C ,常见的误解
  5. python单元测试的应用_单元测试使用请求库的python应用程序
  6. Centos(Linux)升级git最新版本
  7. 微服务升级_SpringCloud Alibaba工作笔记0025---Nacos持久化切换配置
  8. 笔记:UITextView内容垂直居中方法
  9. MariaDB5.5.32 绿色版下载安装一条龙
  10. Linux下编译OpenSSL
  11. 错误推测法设计测试用例
  12. 百练noi21:二维数组右上左下遍历,24:蛇形填充数组
  13. 交通行业大数据应用和发展现状
  14. 基于flask构建微服基本demo
  15. 端口被占用,简单快捷的解决方法
  16. Android 之路35---Fragment
  17. EMQ 加入VMware 创新网络“威睿加速计划” 并将参加 VMware 创新网络 2019 高峰论坛
  18. S32K3 MCAL WDG看门狗配置详解 基于EBtresos
  19. 反思篇 自我提升第四天
  20. 微位科技李子阳:Knocknock諾客—从个人通讯录到区块链身份节点

热门文章

  1. 活动安排问题--贪心算法
  2. C#设置WebBrowser IE浏览器版本
  3. ASP.NET中TextBox控件设置ReadOnly=true后台取不到值
  4. 不定字段数目的数据库表设计和数据结构
  5. MySQL(七):InnoDB 自适应Hash索引(Adaptive Hash Index)
  6. PyCharm设置字体大小(亲测)
  7. 12v电量显示制作方法_如何制作老式12v充电器(四款12v充电器设计制作详解)
  8. 指令引用的0x0000000内存 不能为written_浅谈虚拟机内存区
  9. json格式输出数组隐藏键值方法
  10. 测试工具_10款优秀的浏览器兼容性测试工具