2012-08-15 61 views
1

我有一個長長的Regex模式中的幾個匹配組。圍在中間我有在匹配組中丟棄字符

...(?<number>(?:/(?:digit|num))?\d+|)... 

應該匹配類似/num9/digit99或空白(因爲我需要命名組出現,即使它是空所產生的關聯數組)。

該模式起作用,但如果前兩種情況中的一種匹配,是否可以丟棄/字符?我嘗試了一個積極的向前看,但似乎你不能使用這些,如果你有表達式之前有表達式。

正在嘗試使用正則表達式來實現嗎?

+0

向我們顯示您的代碼。 – Jocelyn 2012-08-15 21:01:13

+0

嘗試積極向後看,並將其放在命名組之外。 – FailedDev 2012-08-15 21:02:25

+0

@FailedDev這不符合'/ 9'嗎? – Blake 2012-08-15 21:04:18

回答

3

根據您的意見,我認爲您需要在某個時候捕獲/,否則您的整個正則表達式會失敗。同時你想忽略它,所以它不能成爲你命名組的一部分。因此,通過把它外面並使它可選,同時確保一個數字不是由你來了/與期望的結果直接前面:

^/?(?<number>(?:(?:digit|num))?(?<!/)\d+|)$ 

但是鑑於你沒有一個更完整的輸入和正則表達式,我不是100%肯定這會適用於你所有的情況。

+0

這是一個非常可愛的解決方案。我需要開始思考。 – Blake 2012-08-15 21:21:15

+1

@布萊克你會得到它的竅門。只需要時間:) – FailedDev 2012-08-15 21:22:10