2013-07-17 92 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+(?=:$)