2013-07-17 36 views
3

我试图捕捉以下6位数字:麻烦与正则表达式中的非捕获组

ObjectID: !nrtdms:0:!session:slonwswtest1:!database:TEST:!folder:ordinary,486150: 

我尝试以下的正则表达式:

\d+(?::$) 

尝试使用非捕获组将大肠脱离返回的匹配,但它返回冒号,如下所示:

486150: 

任何标识我做错了什么?

+0

也许'\ d {6}'会比声称它在最后一部分简单字符串... – Bergi

回答

3

你要积极前瞻:

 
\d+(?=:$) 

一个非捕获组是根本无法通过反向引用来访问一组;尽管如此,他们仍然是比赛的一部分。

或者,你可以使用

 
(\d+):$ 

,并获得第一个比赛组。

+0

太棒了。非常感谢。 – CodingUnderDuress

+0

@CodingUnderDuress没问题,很高兴我能帮上忙。 – arshajii

2

可能是您的正则表达式工具正在返回完整匹配,因为您没有任何捕获组。尝试将\d+放在捕获组中,并找到在正则表达式工具中获取捕获组1的方式。

另外,您还可以使用正前瞻

\d+(?=:$) 

的,而且是要捕捉6个数字,你就可以说明确:

\d{6} 
+0

你对这个工具可能是对的。尽管如此,先行的方法是伟大的。非常感谢。 – CodingUnderDuress

+0

@CodingUnderDuress。不客气:)接受答案。 –

+0

虽然他在该正则表达式中没有任何捕获组。 – arshajii

2

您应该使用积极向前而不是非捕获组

\d+(?=:$) 
+0

太好了。非常感谢。 – CodingUnderDuress

2

非捕获groups是不会创建捕获(将用于反向引用或从匹配结果中提取)的组。尽管如此,他们会匹配的表达。

什么你要找的是lookahead - 要测试的表达,但在比赛中排除:

\d+(?=:$)