日期:2014-05-20  浏览次数:20868 次

正则表达式中非捕获组(?:X)和(?>X)表示什么意思啊,最好有个例子????
谢谢

------解决方案--------------------
第一个没见过。。。是(?!X) ?
第二个是正向预搜索,(? <X)是反向预搜索

http://blog.csdn.net/believefym/archive/2007/05/31/1633369.aspx
------解决方案--------------------
在jdk帮助文档有的
------解决方案--------------------
(?:X)
这个是非捕获组,其实这个对结果不影响的,只是说你这个括号不是分组,只是为了吧一段规则包含起来。因为保存分组需要时间和内存,给你个例子。这个。呵呵。也算是抄的吧。别的网上看的

(?:(\w)\1)+
这里有几个分组?答案是1个。就是(\w),然后\1就是对(\w)这个分组的引用。而外面的(?:)就不是分组了。但是我需要多个(\w)\1的时候,我需要引用(\w),但对外面的,不需要取这个分组。就可以取消这个分组,这个是关系到效率的问题。在海量数据检索的时候。使用非捕获组可以提高一点效率。这个我检查过,大约用非捕获组可以提高10%~20%的效率。

(?> X)
这个是原子组。我就不解释了。直接帖给你:
原子组的目的是使正则引擎失败的更快一点。因此可以有效的阻止海量回溯。原子组的语法是 < <(?> 正则表达式)> > 。位于(?> )之间的所有正则表达式都会被认为是一个单一的正则符号。一旦匹配失败,引擎将会回溯到原子组前面的正则表达式部分。前面的例子用原子组可以表达成 < <^(?> (.*?,){11})P> > 。一旦第十二个字段匹配失败,引擎回溯到原子组前面的 < <^> > 。
------解决方案--------------------
顺便冲一楼狡谐的一笑,漏出洁白的牙齿。光辉灿烂的说一句:小子想PK吗? 哇哈哈哈哈