深刻理解正则表达式的"组"以及"?:"
2016-08-16 20:00
197 查看
一、正则表达式组的概念:
Groups
Group是指里用括号括起来的,能被后面的表达式调用的正则表达式。Group 0 表示整个表达式,group 1表示第一个被括起来的group,以此类推。所以;
A(B(C))D
里面有三个group:group 0是ABCD, group 1是BC,group 2是C。
二、?:的理解—取消所在括号的组:
有点难以理解,直接通过小demo来讲解。
分析如下:
如果不加 ?:则有3个组:
group(1)—–123abc45def
group(2)—–abc
group(3)—–def
如果在最外面的括号中加入?:如String reg = “(?:\d{1,3}(.*?)\d{2}([a-z]{3}))”,则只有2个组了,?:取消它所在的括号的组。
此时,group(1)—abc, group(2)—def;
如果在第二个括号里加入?:,则表示取消该括号的组,此时只有两个组。
如:String reg = “(\d{1,3}(?:.*?)\d{2}([a-z]{3}))”;
则group(1)—–123abc45def
group(2)——def.
如果加入两个?:,如:String reg = “(?:\d{1,3}(?:.*?)\d{2}([a-z]{3}))
则,只剩下一个组了,即group(1)—def。
这是我的个人理解,不正之处,请斧正。
Groups
Group是指里用括号括起来的,能被后面的表达式调用的正则表达式。Group 0 表示整个表达式,group 1表示第一个被括起来的group,以此类推。所以;
A(B(C))D
里面有三个group:group 0是ABCD, group 1是BC,group 2是C。
二、?:的理解—取消所在括号的组:
有点难以理解,直接通过小demo来讲解。
public static void main(String[] args) { String reg = "(\\d{1,3}(.*?)\\d{2}([a-z]{3}))"; Pattern p = Pattern.compile(reg);// Matcher m = p.matcher("123abc45def"); System.out.println("group count = "+m.groupCount()); if(m.matches()){ System.out.println("结果:"+m.group(2)); }else{ System.out.println("not found"); } }
分析如下:
如果不加 ?:则有3个组:
group(1)—–123abc45def
group(2)—–abc
group(3)—–def
如果在最外面的括号中加入?:如String reg = “(?:\d{1,3}(.*?)\d{2}([a-z]{3}))”,则只有2个组了,?:取消它所在的括号的组。
此时,group(1)—abc, group(2)—def;
如果在第二个括号里加入?:,则表示取消该括号的组,此时只有两个组。
如:String reg = “(\d{1,3}(?:.*?)\d{2}([a-z]{3}))”;
则group(1)—–123abc45def
group(2)——def.
如果加入两个?:,如:String reg = “(?:\d{1,3}(?:.*?)\d{2}([a-z]{3}))
则,只剩下一个组了,即group(1)—def。
这是我的个人理解,不正之处,请斧正。
相关文章推荐
- [转]关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- 关于正则表达式中的"或"
- 对"return false"的深刻理解
- 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配
- "通配符"和"正则表达式"的区别
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- 正则表达式中的"^"这个符号的一些思考
- 正则表达式中对于"不匹配"特定pattern的实现
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- 关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?”
- php 正则表达式 将形如 "天," ,"安", "门" 转化为"天、安、门", (仅匹配汉字)
- SQL Server中利用正则表达式替换日期中的"-|:| "字符串为空
- 正确使用带有"g"标记的javascript正则表达式
- jmeter正则表达式提取器的"?"是什么意思?怎么匹配?
- python fib 以及","表达式
- "grep"及正则表达式的一般用法
- 正确使用带有"g"标记的javascript正则表达式
- 正则表达式问题:如何理解/href\s*=\s*(?:"(?<1>[^"]*)"|(?<1>\S+))/(转载)
- 正则表达式:匹配字符串中除了"abc"以外的所有其它部分
- 正则表达式中的"^"这个符号的一些思考