正则表达式中非捕获组的问题

时间:2013-07-17 15:05:07

标签: regex

我正在尝试捕获以下内容中的6位数字:

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

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

\d+(?::$)

尝试使用非捕获组从返回的匹配中剥离冒号,但它返回冒号,如下所示:

486150:

任何想法我做错了什么?

4 个答案:

答案 0 :(得分:3)

你想要一个积极的向前看:

\d+(?=:$)

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

或者,您可以使用

(\d+):$

并获得第一个匹配组。

答案 1 :(得分:2)

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

或者,您也可以使用正面预见

\d+(?=:$)

鉴于你想要捕获6位数,你可以明确地说明:

\d{6}

答案 2 :(得分:2)

你应该使用积极的前瞻而不是非捕获组

\d+(?=:$)

答案 3 :(得分:2)

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

您正在寻找的是lookahead - 测试表达式但将其从匹配中排除:

\d+(?=:$)