关于java:什么是正则表达式“独立捕获组”?

关于java:什么是正则表达式“独立捕获组”?

What is a regex “independent capturing group”?

从Java 6模式文档中:

Special constructs (non-capturing)

(?:X)X, as a non-capturing group

(?>X)X, as an independent, non-capturing group

(?:X)(?>X)之间有什么区别? 在这种情况下,独立意味着什么?


这意味着分组是原子的,并且丢弃了匹配组的回溯信息。因此,该表达式是所有格;即使这样做是正则表达式整体成功的唯一途径,它也不会退缩。它是"独立的",即它不会通过回溯与正则表达式的其他元素协作来确保匹配。


我认为本教程将说明确切的"独立,非捕获组"或"原子分组"是什么

正则表达式a(bc|b)c(捕获组)匹配abcc和abc。正则表达式a(?>bc|b)c(原子组)匹配abcc,但不匹配abc。

当应用于abc时,两个正则表达式都将a匹配到a,将bc匹配到bc,然后c将在字符串末尾匹配失败。在这里,他们的道路有所不同。具有捕获组的正则表达式已经记住了交替的回溯位置。该组将放弃其匹配项,b然后匹配b,c匹配c。找到匹配项!

但是,具有原子组的正则表达式在bc匹配后从原子组退出。此时,该组内令牌的所有回溯位置都将被丢弃。在此示例中,替换选项尝试在字符串的第二个位置尝试b。结果,当c失败时,正则表达式引擎没有其他选择可以尝试。


如果您有foo(?>(co)*)co,将永远不会匹配。我敢肯定有一些实用的例子说明什么时候有用,请尝试O'Reilly的书。


(?> X?)等于(?:X)?+,(?> X *)等于(?:X)* +,(?> X +)等于(?:X)++。

编辑:
上面的"语法"表示:
(?>X?)等于(?:X)?+(?>X*)等于(?:X)*+(?>X+)等于(?:X)++

除去X必须是一个非捕获组的事实,前面的等价项是:

(?>X?)等于X?+(?>X*)等于X*+(?>X+)等于X++


推荐阅读

    linux启用命令模式?

    linux启用命令模式?,系统,密码,数字,首页,电脑,情况,终端,界面,模式,命令,安

    linux回到命令行模式?

    linux回到命令行模式?,系统,密码,状态,工具,电脑,终端,界面,环境,地方,命令,

    linux命令模式联网?

    linux命令模式联网?,网络,系统,工具,软件,密码,地址,最新,信息,工作,数据,lin

    linux命令模式全屏?

    linux命令模式全屏?,系统,工具,电脑,数据,位置,命令,虚拟机,分辨率,字符串,

    linux中回到命令模式?

    linux中回到命令模式?,系统,密码,情况,状态,终端,环境,信息,首页,界面,命令,

    linux命令行模式6?

    linux命令行模式6?,系统,设计,信息,工作,终端,首页,庞大,服务,地方,环境,linu

    linux怎么用命令模式?

    linux怎么用命令模式?,工作,地址,系统,信息,管理,命令,目录,情况,图形界面,

    linux插入命令模式?

    linux插入命令模式?,工作,系统,地址,管理,信息,时间,命令,目录,平均,项目,Lin

    命令行模式登陆linux?

    命令行模式登陆linux?,密码,系统,工作,信息,终端,环境,状态,地址,工具,服务,l

    linux进入文档命令?

    linux进入文档命令?,工作,地址,图片,系统,标准,命令,信息,设备,一致,发行,Lin

    linux打开命令模式?

    linux打开命令模式?,系统,密码,管理,情况,终端,命令,工具,信息,地方,电脑,LIN

    linux纯命令模式切换?

    linux纯命令模式切换?,系统,密码,状态,电脑,网络,信息,模式,命令,情况,地方,L

    linux命令底行模式?

    linux命令底行模式?,系统,地址,工作,命令,管理,时间,信息,模式,控制台,图形

    linux上传文档命令?

    linux上传文档命令?,服务,工具,密码,系统,软件,工作,电脑,综合,命令,文件,Lin

    linux如何命令建文档?

    linux如何命令建文档?,时间,名字,文件,系统,新增,命令,文件名,密码,工作,目

    linux命令打开文档?

    linux命令打开文档?,系统,软件,图片,电脑,一致,环境,名称,发行,中心,官方网

    linux命令正则表达式?

    linux命令正则表达式?,工作,环境,基础,网络,单位,名称,平台,信息,正规,管理,L

    linux剪切文档命令是?

    linux剪切文档命令是?,标准,系统,数据,文件,命令,地方,第一,位置,电子,名字,l

    linux简单的文档命令?

    linux简单的文档命令?,系统,地址,标准,工作,命令,数据,管理,时间,信息,单位,l

    linux查询文档命令?

    linux查询文档命令?,工作,地址,标准,命令,管理,信息,文件,目录,内容,终端,lin