`
ybhuxiao
  • 浏览: 193244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[正则]零宽断言:同事给我出了一题

    博客分类:
  • java
阅读更多
同事给我出一题,如下:

	public static void main(String[] args) {
		String str = "one123";
		String regex = "(?<=one)(?=123)";
		String[] strs = str.split(regex);
		for (int i = 0; i < strs.length; i++) {
			System.out.printf("strs[%d] = %s%n", i, strs[i]);
		}
	}


问我输出什么

我不知道

而且第一次知道split原来可以用正则,

而且第一次知道还有printf这个……感觉这么用不太好,但是,真得长见识了

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

运行一下,输出如下:
strs[0] = one
strs[1] = 123


查看一下split方法,是支持正则的
那regex显然是个正则了,但是没用过这种
查文档,发现这就是传说中的零宽断言(看正则的时候见到过,但是从来没用过)

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

介绍一下零宽断言:

普通的正则表达式如\d(匹配数字)、\s(匹配空白符),都是一个或者多个字符。零宽断言比较特殊,他不匹配任何字符,而是匹配位置。也就是说它们像\b,^,$那样用于指定一个位置。
画个图表示一下(?<=las)表示的是las后面的位置,即箭头处,s和g之间的位置。



零宽断言有4种:

  1. (?=exp)匹配exp前面的位置
  2. (?<=exp)匹配exp后面的位置
  3. (?!exp)匹配后面不是exp的位置
  4. (?<!exp)匹配前面不是exp的位置


我这里说的不是很详细,如果有不明白的地方,可以参考下列网址:
正则表达式30分钟入门
正则表达式——零宽断言
正则表达式——零宽断言


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

补充了上面的知识之后,我们的问题也就差不多了

(?<=one)和(?=123)实际上都是匹配one和123之间的那个位置,split这个位置,也就是从中间这个位置分隔,得到one和123就没问题了

先不考虑同时(?<=one)和(?=123)的问题,把regex换成(?<=one)或(?=123),应该也是可以的,经测试确实是可以的。

那么写两个没问题么?从结果上看确实是没有问题的。具体原因,还在探索中,我猜想毕竟是位置,一个多个可能无所谓,试了一下,写成这种“(?<=one)(?<=ne)(?=1)(?=123)”都是没问题的,也就是说位置是可以写重复的,原因我再查查文档,查到的话再贴过来,有路过的大虾顺便留个言。

  • 大小: 5 KB
2
0
分享到:
评论

相关推荐

    正则表达式。包括零宽断言,正则替换的150种表达方式

    本文将深入探讨正则表达式的高级应用,特别是零宽断言和正则替换的150种表达方式。 ### 一、零宽断言 零宽断言(Zero-width Assertions)在正则表达式中用于标记位置,但不会消耗任何字符。有两种主要类型:正向零...

    正则表达式 零宽断言

    其中,**零宽断言**是正则表达式的一个较为复杂的特性,它允许在不消耗任何字符的情况下对文本中的位置进行检查。这种检查可以是在当前位置之前或之后进行的。 **零宽断言**的主要特征在于其“零宽度”的特性——即...

    正则表达式零宽断言详解

    正则表达式零宽断言: 零宽断言是正则表达式中的难点,所以本章节重点从匹配原理方面进行一下分析。零宽断言还有其他的名称,例如”环视”或者”预搜索”等等,不过这些都不是我们关注的重点。 一.基本概念: 零宽断言...

    正则表达式之零宽断言实例详解【基于PHP】

    之前我曾写了一篇关于正则表达式的文章(//www.jb51.net/article/111359.htm) 在该文章中详细介绍了正则,但是关于零宽断言介绍却是很少提及到。现在将该内容补充一下。在本文中,主要解决如下问题: ① 什么是零宽...

    C#正则表达式文本框验证:只能输入整数和带两位小数的小数

    一个WinForm程序用以测试C#正则表达式文本框验证:只能输入整数和带两位小数的小数。如暂时无法下载,可以查看本人CSDN博客里相应文章中关于该程序的思路。能力有限,仅供交流学习,请多多指教。

    Python正则表达式全攻略:从入门到精通

    正则表达式是一种强大的文本处理工具,它用于搜索、替换、分割和匹配文本模式。在Python中,正则表达式通过re模块实现,这个模块提供了丰富的函数来处理正则表达式相关的操作。本文将详细介绍如何在Python中使用正则...

    Android常用字符串匹配正则

    isMobileSimple : 验证手机号(简单) isMobileExact : 验证手机号(精确) isTel : 验证电话号码 isIDCard15 : 验证身份证号码15...getReplaceFirst: 替换正则匹配的第一部分 getReplaceAll : 替换所有正则匹配的部分

    正则表达式主要语法详解+编程知识+技术开发

    正则表达式语法:正则表达式主要语法详解+编程知识+技术开发; 正则表达式语法:正则表达式主要语法详解+编程知识+技术开发; 正则表达式语法:正则表达式主要语法详解+编程知识+技术开发; 正则表达式语法:正则...

    正则表达式在excel里的应用实例

    正则表达式在excel下的应用实例,难得的精品。。。。。。

    比较好的全能正则表达式

    2. **网址匹配**:对于网站抓取、链接验证等任务,正则表达式能够快速识别出合法的URL格式。 3. **文本分析**:如日志文件分析、文档关键字提取等,都需要高效的文本处理手段。 #### 常见正则表达式元素解析 1. **...

    正则表达式经典实例

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,广泛应用于文本处理、数据验证、搜索和替换等场景。在Java编程语言中,正则表达式提供了强大的字符串处理功能,使得开发者能够高效地处理...

    正则表达式教程:30分钟让你精通正则表达式语法 _

    正则表达式教程:30分钟让你精通正则表达式语法 _

    易语言正则表达式文本替换

    例如,"子程序_正则文本替换"可能就是一个易语言中用于执行正则表达式替换的子程序,它接收输入的文本、正则表达式模式和替换字符串,然后返回经过替换操作的新文本。 1. **正则表达式基础** - **元字符**:如`.`...

    从零开始学习正则表达式

    正则表达式语法(01): 关于大小写与中文 正则表达式语法(02): 或者与重复 正则表达式语法(03): 匹配范围 正则表达式语法(04): 常用转义字符与 . 正则表达式语法(05): 边界 正则表达式语法(06): 贪婪匹配与非贪婪匹配 ...

    正则表达式综合练习

    正则表达式(Regular Expression,简称regex)是用于匹配字符串的一种模式,它在IT行业中扮演着重要的角色,尤其是在数据处理、文本分析、爬虫技术等领域。正则表达式通过使用预定义的字符集和特殊符号,可以高效地...

    常用正则表达式

    ### 常用正则表达式知识点解析 #### 1. 匹配正整数(含0) **正则表达式**: `^\d+$` **解释**:此正则表达式用于匹配任何由数字组成的字符串,并且该字符串只能包含数字。`^`表示字符串的开始,`\d`代表任意一个...

    java11编译的正则匹配测试器

    Java 11正则匹配测试器是一个专门设计用于验证和测试正则表达式的实用工具,它可以帮助开发者在编写和调试正则表达式时提高效率。这个工具是使用Java 11进行编译和构建的,因此为了正确运行,你的开发环境必须至少...

    随风正则匹配工具 v1.0.0.0.zip

    随风正则匹配工具支持多语言,自动生成正则文本,根据语言的不同,生成不同的执行语法,匹配成功后直接复制后可到所属语言直接使用。 随风正则匹配工具功能: 一:支持多语言,目前支易、PHP、JSP等 二:自动生成...

Global site tag (gtag.js) - Google Analytics