Java使用正则表达式实现重叠匹配

问题:在一篇文章中一个匹配日期 yyyy-MM-dd 的程序。

显然一个日期对应Java中的正则表达式

然而,这样的正则表达式实现方式在处理如下输入数据时,无法提取出重叠的匹配

结果

这是由于第一个匹配消耗了其所在的所有字符的缘故,后续匹配将无法使用这些字符。这是我们需要使用 (?=((\\d{4})-(\\d{2})-(\\d{2}))). 正则表达式。

其中 (?=X) 这个语法匹配一个“位置”,这个位置向后可以完全匹配正则表达式X。 (\\d{4})-(\\d{2})-(\\d{2}) 是之前用于匹配日期的正则表达式, . 用于匹配单个字符。整个正则表达式语义为“匹配一个可以匹配日期字符串的位置及其后的一个字符”。

而原来的年月日信息可以通过 groups() 函数得到——

对应的整个程序为——

 

原创文章地址:【Java使用正则表达式实现重叠匹配】,转载时请注明出处mhy12345.xyz

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据