正则表达式matcher.group用法
发布时间:2020-12-13 22:30:19 所属栏目:百科 来源:网络整理
导读:http://winter8.iteye.com/blog/1463244 原来,group是针对()来说的,group(0)就是指的整个串,group(1) 指的是第一个括号里的东西,group(2)指的第二个括号里的东西。 最近学习正则表达式,发现Java中的一些术语与其他地方描述的有所差异。比如Java
http://winter8.iteye.com/blog/1463244
原来,group是针对()来说的,group(0)就是指的整个串,group(1) 指的是第一个括号里的东西,group(2)指的第二个括号里的东西。 最近学习正则表达式,发现Java中的一些术语与其他地方描述的有所差异。比如Java正则表达式中的“组”概念与《正则表达式必知必会》一书中讲述的“子表达式”其实是一样的,只是表述不同而已。由此也引发了使用JavaAPI时对group(int group)、start(int group)、end(int group)不是太理解。在阅读了关于正则表达式问题:有谁用过Matcher类的group()方法没有 之后彻底明白,并写了一个小程序测试。程序如下
程序的运行结果为: Group0:World! 总结:其实group(),start(),end()所带的参数i就是正则表达式中的子表达式索引(第几个子表达式),由于刚开始对Java正则表达式中的组的概念不清晰,导致理解困难。当将“组”的概念与“子表达式”对应起来之后,理解matcher的group,start,end就完全没有障碍了。
package testRegex; import java.util.regex.*; public class Test2 { public static void main(String[] args) { // TODO 自动生成的方法存根 Pattern p=Pattern.compile("D+,(D+(d+))-(D+)"); Matcher m=p.matcher("1234Abc,efg89-EEE666"); if (m.find()) { System.out.println(m.group()); System.out.println(m.group(0)); System.out.println(m.group(1)); System.out.println(m.group(2)); System.out.println(m.group(3)); } } } 输出结果: Abc,efg89-EEE Abc,efg89-EEE efg89 89 EEE 可以看出子串的编号是从左到右,依次增大。一个子串A包含的子串A1的groupId,大于该子串A所平级子串B(在A的后面)的groupId. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |