下面看看逆序环视结构:
public class GeneralSix {
public static void main(String[] args) {
String[] strings = new String[]{"see","bee","tee"};     
String[] regexs = new String[]{"(?<=s)ee","(?<!s)ee"};
for(String regex:regexs){
for(String str:strings){
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if(m.find()){
System.out.println("\"" + str +"\" 能够匹配正则:"+regex);
}else{
System.out.println("\"" + str +"\" 不能够匹配正则:"+regex);
}
}
System.out.println("");
}
}
}
运行结果:
"see" 能够匹配正则:(?<=s)ee
"bee" 不能够匹配正则:(?<=s)ee
"tee" 不能够匹配正则:(?<=s)ee
"see" 不能够匹配正则:(?<!s)ee
"bee" 能够匹配正则:(?<!s)ee
"tee" 能够匹配正则:(?<!s)ee
(?<=s)ee
肯定逆序环视结构,用来查找前面为s的ee。
(?<!s)ee
否定逆序环视结构,用来查找之前不为s的ee
环视的注意事项:
l 环式结构仅用于布尔判断,结构内的子表达式所匹配的文本,不会保存在整个表达式的匹配结果中
l 逆序环视结构对子表达式存在限制
逆序环视结构的限制
l Perl,Python:逆序环视结构中的子表达式必须为固定长度
就是不能使用任何量词,也不能使用多选分支,长度不相同的多选结构
l PHP,Java:逆序环视结构中的子表达式可以不定长度,但必须由上限
就是不能使用 *、+ 这样的量词。
l .NET:逆序环视结构中的子表达式完全没有限制
从这个意义上说,.NET的正则表达式是做的最好的。
环视应用实例:
l 修整数值
l 要求:在数值中的合适位置插入逗号,将其修整为便于阅读的形式
l 举例:
·1234567890->1,234,567,890
·123456->123,456
环视应用实例:
l 需要插入逗号的位置:
·左侧至少出现一位数字,右侧出现的数字位数是3的倍数
l 正则表达式:
·(?=\d)(?=(\d{3}+))
public class GeneralSeven {
public static void main(String[] args) {
String[] numbers = new String[]{"123456","1234567890"};     
String regex = "(?<=\\d)(?=(\\d{3})+)";
for(String number:numbers){
System.out.println("替换前:"+number);
System.out.println("替换后:"+number.replaceAll(regex, ","));
}
}
}
运行结果:
替换前:123456
替换后:1,2,3,456
替换前:1234567890
替换后:1,2,3,4,5,6,7,890
这个结果有问题,123456应该显示为,123,456
1234567890 应该为:1,234,567,890
问题出在:
 "(?<=\\d)(?=(\\d{3})+)";
右边出现的是3的倍数,对这个字符串长度,就是匹配到哪个为止,我们并没有限定。
对肯定顺序环结构对字符串的匹配加以更准确的限制。
应该再添加一个否定循环结构:
String regex = "(?<=\\d)(?=(\\d{3})+(?!\\d))";
替换前:123456
替换后:123,456
替换前:1234567890
替换后:1,234,567,890
小结:
l 锚点:规定匹配的位置
· \b、^、$、\A、\Z
l 环视:以子表达式对位置进行判断
·(?=)、(?!)
·(?<)、(?<!)
·环视只能进行布尔判断
·逆序环视的限制

正则表达式 学习笔记4 完!

本文转自jooben 51CTO博客,原文链接:http://blog.51cto.com/jooben/318587

正则表达式 学习笔记4.3相关推荐

  1. 正则表达式 学习笔记1.3

    书接上一回: 实例五:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /& ...

  2. 正则表达式 学习笔记3.4

    第一段为合法html代码,第二段为不合法html代码.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office ...

  3. 正则表达式学习笔记011--贪婪和懒惰的匹配

    正则表达式学习笔记011--贪婪和懒惰的匹配 交流群1:251572072 交流群2:170933152 1.什么是贪婪匹配 从字面上理解:贪心,不满足,有多少要多少 比如正则里也一样:.*,.+,{ ...

  4. 正则表达式学习笔记010--子表达式的认识与应用

    正则表达式学习笔记010--子表达式的认识与应用 交流群1:251572072 交流群2:170933152 子表达式: ()用2个小括号,括起来的叫做子表达式 如: \d{3,4}([\s|-]?\ ...

  5. 正则表达式学习笔记009--大括号与选择符的认识与应用

    正则表达式学习笔记009--大括号与选择符的认识与应用 交流群1:251572072 交流群2:170933152 |  选择符 {n}前面的元素字符出现了n次 {n,}前面的元素字符最少出现n次,n ...

  6. 正则表达式学习笔记008--字符组简记法2

    正则表达式学习笔记008--字符组简记法2 交流群1:251572072 交流群2:170933152 \s [\t\n\r\f]     \t制表符     \n换行符     \r回车符     ...

  7. 正则表达式学习笔记007--字符组简记法1

    正则表达式学习笔记007--字符组简记法1 交流群1:251572072 交流群2:170933152 字符组简记法 1.对于常用的字符组,正则表达式提供了相应的简记法,能够方便的表示 它们,并让我们 ...

  8. 正则表达式学习笔记006--转义符的认识与应用

    正则表达式学习笔记006--转义符的认识与应用 交流群1:251572072 交流群2:170933152 也可以自己下载: 正则表达式学习笔记006--转义符的认识与应用 http://credre ...

  9. 正则表达式学习笔记005--脱字符和美元符的认识与应用

    正则表达式学习笔记005--脱字符和美元符的认识与应用 以前写的课程都没有附上源码,很抱歉! 交流群1:251572072 交流群2:170933152 也可以自己下载: 正则表达式学习笔记005-- ...

最新文章

  1. Mac os下android studio模拟器无法联网解决方法
  2. 创建和应用Java包文件的两种方式(转)
  3. 如何使用autotools工具
  4. 神奇的css3(2)动画
  5. WPF使用Canvas绘制可变矩形
  6. IIS 5 与IIS 6 原理介绍
  7. 用c#转换word或excel文档为html文件,C#实现DataSet内数据转化为Excel和Word文件的通用类完整实例...
  8. oracle判断日期字符串格式,如何测试日期格式字符串是否为Oracle中的有效日期格式字符串...
  9. oracle数据库sql语句插入时间信息
  10. 测试3.0u盘速度软件,SanDisk USB3.0接口的U盘测试
  11. 批量文件转码工具(支持GBK,UTF-8转换)
  12. 微信小程序:升级版手机检测微信工具小程序源码
  13. Fluent UDF代码编写
  14. excel简单操作。python
  15. 小野さん と ペット
  16. iphone的铃声格式
  17. CSS3之边框图片border-image
  18. Leetcode771:宝石与石头
  19. HTML5+CSS3期末大作业:电影网站设计——黑色扁平的电影工作室静态网页 学生DW网页设计作业成品 web课程设计网页规划与设计 计算机毕设网页设计源码
  20. 如何写/审AI领域的论文【VALSE Webinar】Panel实录

热门文章

  1. 34岁回顾人生,也怕中年危机!
  2. CMDB功能分析与实现方案
  3. BZOJ1016:[JSOI2008]最小生成树计数——题解
  4. Linux Command Line 解析
  5. Juniper Firewall多进单出配制实例
  6. [转]张孟苏考上的不是大学
  7. python中意外缩进是什么意思_如何处理python中的“意外缩进”?
  8. MapReduce详解和WordCount模拟
  9. Java的接口、继承与多态
  10. JQuery框架2.位置属性|筛选方法|事件