黑马程序员技术交流社区
标题:
正则表达式中的组和捕获相关概念到底什么意思?
[打印本页]
作者:
xiaote0225
时间:
2015-9-16 00:58
标题:
正则表达式中的组和捕获相关概念到底什么意思?
问题一:正则表达式中,组和捕获到底什么意思?
在表达式
((A)(B(C)))
中,到底有几个组?
问题二:String[]
arr
=
str.split
("(.)\\1+");这句话到底什么意思?
作者:
瑞雪雄起
时间:
2015-9-16 02:44
((A)(B(C))):外面有一个大组,里面有两个并列的小组,右边的小组里面还有个小组,共四个组。从左到右依次捕获
组和捕获
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 \A
3 (B(C))
4 (C)
组零始终代表整个表达式。
之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器获取。
与组关联的捕获输入始终是与组最近匹配的子序列。如果由于量化的缘故再次计算了组,则在第二次计算失败时将保留其以前捕获的值(如果有的话)例如,将字符串 "aba" 与表达式 (a(b)?)+ 相匹配,会将第二组设置为 "b"。在每个匹配的开头,所有捕获的输入都会被丢弃。 以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。
(.)\\1+"
(.)是个捕获组,\1的意思是在后面继续引用前面的捕获组;X+ ,一次或多次
作者:
xiaote0225
时间:
2015-9-17 00:08
谢谢你的耐心解答
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2